JS模拟块级作用域

根据js的执行环境作用域和垃圾收集机制可知,js没有块级作用域。例如:

for (var i = 0; i < 5; i++) {
}
alert(i); // 5

在java等有块级作用域的语言中,变量i只能在for循环中使用,而在js中却依然可以在for循环结束后访问i,那么,如何解决这个问题呢?
答:用匿名的函数表达式立即执行 的方式来 模仿块级作用域
(function() {
// 这里是块级作用域
})();
那么,上面的for循环,便可以做如下更改:

(function() {
    for (var j = 0; i < 5; i++) {
    }

})();
alert(j);  // 报错:ReferenceError: j is not defined

这样就是私有作用域,在匿名函数中定义的私有变量,都会在执行结束时被销毁。在一个由很多开发人员共同参与的大型应用程序中,过多的全局变量和函数很容易导致命名冲突。而通过创建私有作用域,每个开发人员既可以使用自己的变量,又不必担心搞乱全局作用域。
注意:
function(){
}(); 会报错。
以为function() {} 会被认为是函数声明,而不是函数表达式,而函数声明后面不能跟圆括号
注意:若是var test = function() {}(); 这个便是函数表达式不会报错

猜你喜欢

转载自blog.csdn.net/xujiezi/article/details/50998786