引文:
JavaScript 没有块级作用域的概念。这意味着在块语句中定义的变量,实际上是在包含
函数中而非语句中创建的(也就是在函数外边也可以访问的到),来看下面的例子:
function outputNumbers(count){
for (var i=0; i < count; i++){
alert(i);
}
alert(i); //计数
}
匿名函数来模仿块级作用域:
但是,JavaScript 从来不会告诉你是否多次声明了同一个变量;遇到这种情况,它只会对后续的声明视而不
见(不过,它会执行后续声明中的变量初始化)。匿名函数可以用来模仿块级作用域并避免这个问题。
也就是模仿块级作用域,可以看作一个私有作用域,当然之前的例子会出现一个错误,如下所示:
function outputNumbers(count){
(function () {
for (var i=0; i < count; i++){
alert(i);
}
})();
alert(i); //导致一个错误!
}