鍍金池/ 問答/HTML/ 請(qǐng)教如下這段代碼的參數(shù)含義

請(qǐng)教如下這段代碼的參數(shù)含義

github上看到的代碼:

(function (window) {

    // declare
    var myApp = function () {
        return;
    };

    // your sdk init function
    myApp.prototype.init = function () {
        // ...
    };

    // define your namespace myApp
    window.myApp = new myApp();

})(window, undefined);

請(qǐng)問第一個(gè)括號(hào)里的(window)、和末尾的(window, undefined)分別有什么含義?一般有什么作用呢?

回答
編輯回答
單眼皮

(function (window) {})(window, undefined); 您可以把它看成()(),而()()就是我們常見的匿名函數(shù)自執(zhí)行的寫法。
比如:

(function() {  
   console.log('Hello World!');  
})();  

上面的代碼,當(dāng)頁面加載時(shí),就會(huì)自動(dòng)打印出:Hello World!

為什么會(huì)這么寫?
匿名函數(shù)自執(zhí)行(function() {})()主要為了避免變量的全局污染;該寫法大多用于開發(fā)插件。比如jquery插件。。。

而末尾的參數(shù)為實(shí)參,在這里接受window對(duì)象(瀏覽器環(huán)境),而function后面的圓括號(hào)中的window為局部變量,不是全局的window對(duì)象,這樣寫可以提高js性能,減少作用域鏈查詢時(shí)間。(如果在函數(shù)體內(nèi)多次使用到window對(duì)象,那么把window對(duì)象當(dāng)著實(shí)參穿進(jìn)去,是十分必要的;如果函數(shù)內(nèi)部不需要,那么就無需傳遞該參數(shù)。);
undefined的答案我修改下,之前可能有點(diǎn)錯(cuò)誤,看來綠皮書又要重新看了

clipboard.png

參考鏈接:https://segmentfault.com/q/10...

2017年11月19日 18:41
編輯回答
詆毀你

window 的意思比較好理解,為了把 myApp 綁定到全局對(duì)象上。

2018年3月18日 01:33
編輯回答
妖妖

function A(a){ ... }
A(window, undefined)

這樣寫的話,會(huì)不會(huì)比較好理解呢?

2017年9月11日 02:57
編輯回答
荒城

這是一個(gè)自執(zhí)行函數(shù),第一個(gè)括號(hào)里的window是形參,末尾的兩個(gè)是實(shí)參。window本身就是javascript中范圍最大的一個(gè)對(duì)象,傳入這個(gè)參數(shù)也是沒有必要的

2018年8月28日 23:28
編輯回答
醉淸風(fēng)

首先,你先去掉傳入的參數(shù),(function() { ... })(),你發(fā)現(xiàn)這就是一個(gè)立即執(zhí)行函數(shù),它的作用是什么,可以避免外界變量的影響,如果要使用,外界的變量怎么辦,(function($) { ... })(jQuery),這種形式想必你不陌生吧。另外,我們經(jīng)常這樣使用(function (window, document, undefined) { ... })(window, document),因?yàn)樵贓S3中undefined是變量可以被定義,而在嚴(yán)格模式下會(huì)報(bào)錯(cuò),所以將undefined當(dāng)成一個(gè)局部變量使用。

2018年7月4日 09:51