有人可以向我解釋爲什麼x是未定義的嗎?不應該是123?如何將參數傳遞給javascript匿名函數
doSomething = (function(x) {
alert(x)
})();
doSomething(123);
有人可以向我解釋爲什麼x是未定義的嗎?不應該是123?如何將參數傳遞給javascript匿名函數
doSomething = (function(x) {
alert(x)
})();
doSomething(123);
doSomething
不是函數。這是undefined
。
doSomething = (function(x) {
alert(x)
})();
這聲明一個匿名函數,立即執行它(這是()
做什麼),然後設置doSomething
的返回值 - undefined
。您的匿名函數需要一個參數(x
),但沒有任何內容傳遞給它,因此x
是undefined
。
你可能想這樣的:
doSomething = function(x) {
alert(x)
};
doSomething(123);
您需要刪除括號,現在你定義的功能,並立即用一個空的參數列表調用它。將其更改爲:
doSomething = function(x) {
alert(x)
}
然後您可以調用它。
這不是更好的方法嗎?讓它初始化,然後調用它傳遞一個參數?
doSomething = (function(x) {
return(
init = function(x){
alert(x)
}
)
})();
doSomething("test")
現在你只是讓它更復雜。你爲什麼要創建一個* global *變量'init'?爲什麼主要的匿名者使用參數'x'?如果你真的想這樣做,請執行以下操作:'doSomething =(function(){return function(x){alert(x);};})();' – 2014-10-27 20:31:06
*你實際存在什麼問題*試圖在這裏解決?爲什麼你需要使用自動調用的匿名函數?爲什麼不只是'doSomething = function(x){alert(x); };'? – 2014-10-27 20:32:27
我的一個年輕的同事開發者已經用這種方式包裝了他的所有功能,我正在試圖繞過我的頭來解釋爲什麼。我從來不用這種方式編碼,但他堅持認爲這是良好的做法?任何解釋? – 2014-10-27 20:45:35
這被稱爲IIFE。 – Omar 2014-10-27 21:45:20