以下示例之间有什么区别吗?
示例1:
(function (window) {
'use strict';
console.log(window)
})(window);
示例2:
(function () {
'use strict';
console.log(window)
})();
传递窗口对象是否可选?
答案 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
是只读的且无法重新定义,那么就不再需要这样做了。