如果一个变量,还未定义就开始使用,就会触发“函数提升及变量提升”的机制
函数提升及变量提升描述:
因为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");
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。