小记函数提升及变量提升

如果一个变量,还未定义就开始使用,就会触发“函数提升及变量提升”的机制
函数提升及变量提升描述
因为js的运行机制,简单概括为:js脚本,先解析代码,再执行它。解析的过程,会把其作用域内的函数声明取出来,再把变量都赋值为undefine。当执行的时候(就是我们运行代码,可以打断点调式的时候),虽然一个变量未声明就使用了,但是它已经在解析那一过程中被声明,作赋值操作了,所以,变量的值为undefine,如果是调用未声明函数,也可以正常使用
如果遇到函数名字和变量名字一样,都处于提升情况的时候,函数提升优先级大于变量(实际开发中会有人这么干嘛),但是当变量赋值后,变量的值就不再是函数了,例子见下

1.当形参和变量名字一样时

function test(arg) {//arg="hi"
            console.log(arg);//输出内容为“hi”
            var arg = "hello"; //此处赋值后,上面两处arge="hello"
            console.log(arg);//输出内容为“hello”
        }
        test("hi");

2.当形参和变量及函数名字一样时

function test(arg) {//arg = ƒ arg()
            console.log(arg);//输出内容为“function arg(){console.log("hello world");}”
            var arg = "hello";//此处赋值后,上面两处arge="hello"
            function arg() {
                console.log("hello world");
            }
            console.log(arg);//输出内容为“hello”
        }
        test("hi");

你可能感兴趣的:(javascript,前端)