如果一个变量,还未定义就开始应用,就会触发“函数晋升及变量晋升”的机制
函数晋升及变量晋升形容
因为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");