高手繞道!這跟閉包本身沒什麼大的關係,也不知道怎麼取標題,隨便湊了個數,望見諒!
今天一個剛學js的朋友給了我一段程式碼問為什麼方法不執行,程式碼如下:
function mfunc(x) {
function mMunc(x) { return x;
}
}
alert(makefunc(0));
其實不是不執行,只是朋友的意思這裡alert出來的應該是“0”,而不是function (){return x;}。
不是腳本寫錯了,只是沒搞懂return,從目前函數退出,並從那個函數回傳一個值。如果傳回的是一個函數,那麼回傳的也是函數本身。
可以這樣修改上面的程式碼,就是alert(makefunc(0)()):
複製程式碼
程式碼如下:
function makefunc(x) {
return (function (){
return x;
})();
}
)());
如果要回傳函數執行的結果那麼首先要讓這個函數執行,例如:
複製程式碼
程式碼如下:
function makefunc(x) {
return (function (){
return x;
})();
}
);
程式碼
複製程式碼
程式碼
(function (){
return x;
})();
複製程式碼
程式碼如下:
(function( x , 🎜>(function( x , ){ alert( x y);})(2 ,3 );