最近在整理javascript 學習,發現這個問題了 ,在網上發現這麼個解釋 最清楚 最明白 ; (function(){})() 至關於先定義 function xx(){},後調用 xx(); ()是最高優先級的,因此先執行function(){}, 這個定義了一個匿名函數,等於xx=function(){} 接着就是調用xx()了; 給個例子 JScript code functionf1(a) { alert(a); } functionf2(a) { returnfunction(){ alert(a); } } 這裏的var x=f2 就等於把函數傳遞給了f2,而後要執行這個函數,就必須加() 也就是x(); 也就是f2() 仍是(function f2(a){ return function(){ alert(a); })(); 另外還有一個問題 就是命名空間的問題 YY = YY||{};---聲明一個叫YY的命名空間(定義一個全局的變量) (function() { YY.Lang=function() {------聲明一個叫YY.Lang的命名空間(經過全局變量的增長屬性的方式把閉包裏的對象傳到全局變量中,實現代碼封裝的效果) isUndefined: function(o) { return typeof o === 'undefined'; }, isString: function(o) { return typeof o === 'string'; } }; })(); ---調用方法 alert(YY.Lang.isString('test me')); 這時候就有人不明瞭,樓上爲何要加(function() { 和)(); 最外面的這兩行,有什麼用啊? JScript code YY=YY||{}; //---聲明一個叫YY的命名空間(定義一個全局的變量) //( function() { YY.Lang=function() { //------聲明一個叫YY.Lang的命名空間(經過全局變量的增長屬性的方式把閉包裏的對象傳到全局變量中,實現代碼封裝的效果) isUndefined:function(o) {returntypeofo==='undefined'; }, isString:function(o) {returntypeofo==='string'; } }; } //)(); //---調用方法 alert(YY.Lang.isString('test me')); 疑問在這:?????? 註釋掉這兩行有什麼不同的呢?不就是申明嗎,爲何要用()()執行一下啊? functionaa(){..};//只是定義了一個叫aa的函數,可是並無執行