1. 程式人生 > >JS模擬塊級作用域

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() {}(); 這個便是函式表示式不會報錯