我们在js编程过程中可能会发现这样的现象:
for(var i=0; i<10; i++){ } console.log(i);
在for循环外,输出i,依旧可以看到控制台输出了10,这是因为在js中不存在块级作用域的概念,这意味着在块语句for中定义的变量i,实际上是在包含它的函数或window对象中创建的。
要想得到与Java,C++中的块级作用域相同的效果,我们可以运用闭包来实现,通过一个匿名函数来模仿块级作用域:
(function(){ //匿名函数内就相当于是块级作用域了 for(var i=0; i<10; i++){} })(); //此时变量i已被销毁 console.log(i);
把for循环放到这个匿名函数内之后,再在这个匿名函数外调用i,就可以看到console下出现了Uncaught ReferenceError: i is not defined的报错信息。