请教如下这段代码的参数含义

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);

请问第一个括号里的(window)、和末尾的(window, undefined)分别有什么含义?一般有什么作用呢?

阅读 2.4k
5 个回答

(function (window) {})(window, undefined); 您可以把它看成()(),而()()就是我们常见的匿名函数自执行的写法。
比如:

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

上面的代码,当页面加载时,就会自动打印出:Hello World!

为什么会这么写?
匿名函数自执行(function() {})()主要为了避免变量的全局污染;该写法大多用于开发插件。比如jquery插件。。。

而末尾的参数为实参,在这里接受window对象(浏览器环境),而function后面的圆括号中的window为局部变量,不是全局的window对象,这样写可以提高js性能,减少作用域链查询时间。(如果在函数体内多次使用到window对象,那么把window对象当着实参穿进去,是十分必要的;如果函数内部不需要,那么就无需传递该参数。);
undefined的答案我修改下,之前可能有点错误,看来绿皮书又要重新看了

clipboard.png

参考链接:https://segmentfault.com/q/10...

首先,你先去掉传入的参数,(function() { ... })(),你发现这就是一个立即执行函数,它的作用是什么,可以避免外界变量的影响,如果要使用,外界的变量怎么办,(function($) { ... })(jQuery),这种形式想必你不陌生吧。另外,我们经常这样使用(function (window, document, undefined) { ... })(window, document),因为在ES3中undefined是变量可以被定义,而在严格模式下会报错,所以将undefined当成一个局部变量使用。

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

这样写的话,会不会比较好理解呢?

这是一个自执行函数,第一个括号里的window是形参,末尾的两个是实参。window本身就是javascript中范围最大的一个对象,传入这个参数也是没有必要的

window 的意思比较好理解,为了把 myApp 绑定到全局对象上。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏