模仿块级作用域
模仿塊級作用域
JavaScript中沒有塊級作用域,這意為著在塊語句中定義的變量,實際上是包含在函數中而非語句中創建的。
下面的這個實例可以看出:
function outputNumbers(count){for (var i=0; i < count; i++){alert(i);}alert(i); //count }outputNumbers(5);//0 1 2 3 4 5(for塊語句外輸出的)雖然沒有塊級作用域,但是可以通過匿名函數來模仿塊級作用域
用作塊級作用域(通常稱為私有作用域)的匿名函數語法如下表示:
(function(){//這里是塊級作用域 })();以上代碼定義并立即調用了一個匿名函數。將函數申明包含在一對圓括號中,表示它實際上是一個函數表達式。
注意,下面這種寫法會出錯
//錯誤寫法 function(){//這里是塊級作用域 }();如果一條語句是以function關鍵字開始,那么這段會被JavaScript解析器認為是函數定義。而函數定義是不能被立即執行的,因此就必須有一個辦法,使解析器可以將之識別為函數表達式。因為解析器識別函數定義的條件是以function關鍵字開始,那么只要在function關鍵字的前面有任何其他的元素,就會從函數定義轉變為函數表達式,所以當我們在其前面填括號就會變成函數表達式了。
下面這種寫法也可以:
(function(){//這里是塊級作用域 }());現在讓我們重新寫開頭的那個實例:
function outputNumbers(count){(function () {for (var i=0; i < count; i++){alert(i);}})();alert(i); //ReferenceError: i is not defined,出現錯誤了outputNumbers(5);//0 1 2 3 4總結:無論在什么地方,只要臨時需要使用變量,就可以使用私有作用域,通過創建私有作用域,每個人都可以使用自己的變量,又不用擔心污染全局作用域。
轉載于:https://www.cnblogs.com/YeChing/p/6361497.html
總結
- 上一篇: 在UnitTest中读取*.config
- 下一篇: BXNA在调试显示新闻的JS?