1.在函數中定義形參但沒有傳遞實參就相當於定義了變數但未賦值,所以下麵中的a就是undefined 2.在IIFE中,window作為實參傳遞進去,避免了執行代碼時,每次都到全局中尋找window從而提高了效率,但是為什麼形參中還要指定一個undefined呢,上面說過在函數中定義了形參就相當於定義 ...
1.在函數中定義形參但沒有傳遞實參就相當於定義了變數但未賦值,所以下麵中的a就是undefined
1 function test(a){ 2 console.log(a)//undefined 3 }; 4 test();
2.在IIFE中,window作為實參傳遞進去,避免了執行代碼時,每次都到全局中尋找window從而提高了效率,但是為什麼形參中還要指定一個undefined呢,上面說過在函數中定義了形參就相當於定義了但不賦值,那在這個立即執行函數中undefinde還是undefined。所以即使在全局中修改了undefined的值,也不會影響這個自執行函數中的undefined,不過在chrome 59以上,firefox53以上undefined不被允許修改,輸出的都是undefined。在ie8以下undefined的值能被修改,輸出的是8和undefined,所以傳遞形參就能最大程度的保證了在各種瀏覽器中外部修改變數對函數內部的影響。IIFE前一定要有括弧否則會報錯。
1 //在ie8中 2 var undefined = 8; 3 (function( window , undefined ){ 4 console.log(window.undefined) //8 5 console.log(undefined); //undefined 6 })(window);
//在chrome和Firefox中 var undefined = 8; (function( window , undefined ){ console.log(window.undefined) //undefined console.log(undefined); //undefined })(window);