摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html
js沒有塊級作用域,簡單的例子:
for(var i=0;i<10;i++){
alert(i);
}
alert(i);
for循環後的i,在其它語言像c、java中,會在for結束後被銷毀,但js在後續的操作中仍然能通路到i值,即for循環後的alert(i);會彈出數值i=10;
js模仿塊級作用域:
(function(){
for(var i=0;i<10;i++){
alert(i);
}
})();
alert(i);
js私有作用域(模仿塊級作用域) 文法格式:
贊助商連結
(function(){
//這裡是塊級作用域
//作用:限制向全局作用域中添加過多的變量和函數,即避免内部臨時變量影響全局空間
})();
将函數聲明包含在一對()中,表示該函數實際是一個函數表達式(注:函數表達式後面可以跟(),要将函數聲明轉換成函數表達式,隻需用()将函數聲明包括起來即可),而緊随其後的另一對()會立即調用這個函數。
是以(function(){})(); 可了解成定義了一個函數表達式後,并立即調用該函數表達式,即等同于定義了:
var someFunction=function(){}()
或
var someFunction=function(){};
someFunction();
值得注意的是(function(){})(); 後面是有帶分号;的,不帶這個分号,(function(){})()後面的代碼會報錯的!這個,聯合上面函數表達式後面的分号;來看就可解釋為什麼要帶這個分号了。
(function(){})() 第2個括号可帶多個參數,形如:
(function(arg1,arg2){
})(arg1,arg2);
或
var someFunction=function(arg1,arg2){}(arg1,arg2);
若第2個括号帶了參數,則後面調用該函數必須帶相應的參數,否則會報錯,如:
someFunction()
不帶參數會報錯:Uncaught TypeError: undefined is not a function