在javascript中有权访问全局变量时,将全局变量传递给自调用函数的目的是什么?
例如,
(function(window, undefined){
console.log('Hello World!');
})(window, undefined);
当窗口有权访问全局窗口对象而不将其传入时,引用窗口作为此自调用函数的参数的目的是什么?
答案 0 :(得分:1)
在提供的示例中:
(function(window, undefined){
console.log('Hello World!');
})(window, undefined);
目的是确保IIFE中的 window 引用全局(窗口)对象,并且标识符 undefined 具有undefined value。
但是,在此代码运行之前,这些标识符可能已经被分配了一些其他值,因此它忽略了这一点。为了确定地实现预期结果, this 可用于明确引用全局对象(即浏览器中的 window )和未定义值根本不需要传入(假设这是全局代码)。
考虑:
(function (window, undefined) {
console.log('Hello World!');
})(this);
或者如果你真的是偏执狂:
(function (window) {
var undefined = void 0;
console.log('Hello World!');
})(this);
该代码可放置在全局上下文中的任何位置,并保证在IIFE内,标识符 window 引用全局对象, undefined 具有未定义值
答案 1 :(得分:0)
在你展示的例子中根本没有意义。但它确实在自动执行功能中创建范围,用于非全局变量。