天天看點

js私有作用域(function(){})(); 模仿塊級作用域

摘自: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      

繼續閱讀