5分钟前我碰到了这个小宝石。我已经和JavaScript玩了很长一段时间了,自从我遵循最佳实践以来,我从未遇到过这样的情况,也不明白为什么它会起作用,而我认为它不应该起作用:
for (var i=0; i<10; i++){
// ... something
}
console.log("i=", i);输出10
i如何在for块之外可用?我一直认为声明部分只允许在该块中使用局部变量。
发布于 2013-12-06 02:28:52
我一直认为声明部分只允许在该块中使用局部变量。
不,不是在JavaScript。
JavaScript循环(以及大多数块)没有块作用域(在此之前,下一个版本将与let一起推出)。
目前只有两个地方JavaScript会阻塞作用域,那就是with子句(无论如何不应该使用这些子句)和catch子句。
相反,JavaScript主要依赖于函数的作用域--函数中声明的变量是该函数的本地变量。
发布于 2013-12-06 02:28:32
因为这相当于:
var i=0;
while (i<10){
// ... something
i++;
}实际上,循环甚至根本不创建自己的作用域:
var x = 0;
while (x < 10) {
x++;
var i = 5;
}
i; // 5发布于 2013-12-06 02:30:20
在这种情况下,i的声明在代码块之外。无论如何,Javascript没有块级别的作用域。变量要么是全局变量,要么是函数范围内的变量。
https://stackoverflow.com/questions/20414809
复制相似问题