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";
}
})();