变量范围混淆在JavaScript中
这个问题在这里已经有了答案:
Javascript中只有两种范围; 函数范围和全局范围。
if
语句中的代码没有自己的范围,因此if
语句中的变量与外部的变量相同。
在一个范围内多次声明一个变量不会创建多个变量。 if
语句中的var
关键字被忽略,因为变量已经在范围中声明了一次,所以它只是一个赋值。
还要注意,变量的声明被提升到范围的顶部,所以即使声明位于未执行的代码块中,该变量仍然被创建:
var foo = 1; // a global variable
(function() {
console.log(foo) //outputs "undefined"
foo = 2; // sets the local variable
if(false) {
var foo = 3; // creates the local variable, but the assignment never happens
}
console.log(foo) //outputs 2
})();
console.log(foo) //outputs 1
if
不引入一个范围块(我理解它在某些语言中的确存在)。 在JavaScript中,只有function() {}
创建一个范围块。
上一篇: variables scope confusion in javascript
下一篇: JavaScript: Can I declare variables inside switch cases?