模仿塊級作用域

   在java、C++等語言中,for循環中的i變量只會在for循環的語句塊中有定義,循環一旦結束,變量i就會被銷燬。可是在js中,變量i是定義在outputNumbers()的活動對象中,因此一旦從它有定義開始,就可以在函數內部隨處訪問它。即使像下面這樣錯誤地重新聲明同一變量,也不會改變它的值。

   function outputNumbers(count){

       for(var i=0;i<count;i++){

           alert(i);

       }

       var i;

       alert(i);

   }

   無論在任何地方只要臨時需要一些變量,就可以使用私有作用域,例如:

   function outputNumbers(count){

       (function (){

           for(var i;i<10;i++){

           alert(i);

           }

         })();

       alert(i);//導致一個錯誤

       }

在重寫後的outputNummbers()函數中,我們在for循環外部插入了一個私有作用域。在匿名函數中定義的任何變量,都會在執行結束時被銷燬。因此,變量i只能在循環中使用,使用後即被銷燬。

   這種技術經常在全局作用域中被調用在函數外部,從而限制向全局作用域中添加過多的變量和函數。一般來說,我們都應該儘量少向全局作用域添加變量和函數。在一個由很多開發人員共同參與的大型應用程序中,過多的使用全局變量和函數會導致命名衝突。而通過創建私用作用域,每個開發人員既可以使用的變量,又不必擔心搞亂全局作用域。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章