我正在用3种方式修改一段代码。在这三个条件中表现不同。请描述它是如何执行的?为什么这种奇怪的行为?
var a=1;
function myFunc(){
console.log(a);
console.log(a)
}
myFunc();
//Output is:
1
1
var a=1;
function myFunc(){
console.log(a);
var a=2;
console.log(a)
}
myFunc();
//Output is:
undefined
2
var a=1;
function myFunc(){
console.log(a);
var a=2;
console.log(a)
}
myFunc(a);
//Output is:
undefined
2
为什么在第二种情况下打印未定义?在第三种情况下,我发送全局a作为参数,然后打印未定义。
一句话:吊装。这是一个很好的链接:http://www.adequatelygood.com/JavaScript-Scoping-and-Histing.html –
这被称为[变量提升](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting) –
http://www.adequatelygood.com/JavaScript-Scoping-and-Histing.html – ashley