是否将窗口对象传递给IIFE可选?

时间:2017-12-16 11:38:13

标签: javascript

以下示例之间有什么区别吗?

示例1:

(function (window) {
 'use strict';
  console.log(window)
})(window);

示例2:

(function () {
 'use strict';
  console.log(window)
})();

传递窗口对象是否可选?

1 个答案:

答案 0 :(得分:7)

#1没有多大意义。 window是只读的,无法重新定义,因此无需像#1那样在某个时间点捕获其值。 #2很好。

#1模式主要用于捕获稍后可能被其他代码更改的内容,例如:

var x = 1;
(function(x) {
    setTimeout(function() {
        console.log("inside, x = " + x);
    }, 100);
})(x);
x = 2;
console.log("outside, x = " + x);

...或者获取方便的简写名称:

(function(d) {
    var div = d.createElement("div");
    div.innerHTML = "Hi";
    d.body.appendChild(div);
})(document);

如果undefined标识符被修改,它也常用于获取undefined

(function(u) {
    console.log(typeof u); // "undefined"
})(/*Note there's no argument passed*/);

既然undefined是只读的且无法重新定义,那么就不再需要这样做了。