JS中的塊級作用域

JS中是沒有塊級作用域作用域這個概念,爲實現塊級作用域可通過閉包的形式實現,下面通過一個例子來說一下JS中的塊級作用域。

function outputName(count){
            for (var i = 0; i <count; i++) {
                console.log(i);
            }
        }
        console.log(i)
    }

在JAVA,c++等語言中,變量i只定義在for循環語句中,循環一旦結束,變量i就會被銷燬,而在JS中,變量i存在整個outputName函數的活動對象中,變量i可以在函數內部隨處訪問。如上面例子中的第二條的輸入語句將輸出變量i的值。
JS中的模仿塊級作用域(即私有作用域)的語法如下代碼所示。

(function(){
   //塊級作用域
})();

需要臨時存放一些變量,可以使用私有作用域,修改上例中的代碼,在for循環中添加一個私有作用域,在匿名函數中的任何變量,都會在執行結束後被銷燬。所以在第二條打印輸出i時,會出現錯誤。而私有作用域可以訪問count,是因爲這個匿名函數是一個閉包,它能夠訪問包含作用域中的任何變量。

function outputName(count){
        (function(){
            for (var i = 0; i <count; i++) {
                console.log(i);
            }
        })();
        console.log(i);//打印輸出i時報錯
    }

這種技術經常在全局作用域中被用在函數外部,從而限制向全局作用域中添加過多的變量和函數。由一個很多開發人員編寫的大型應用程序中,通過私有作用域的使用,可以解決由於過多全局變量和函數產生的命名衝突。通過創建私有作用域,每個開發人員可以使用自己的變量,而不用擔心搞亂全局作用域。

(function(){
    var now=new Date();
    if (now.getMinutes()==01) {
        console.log(now);
        var test1=document.getElementById("test1");
        test1.style.display="block";
    }
})();
發佈了45 篇原創文章 · 獲贊 15 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章