当它可以访问javascript中的全局变量时,将全局变量传递给自调用函数的目的是什么?

时间:2014-07-15 23:24:51

标签: javascript

在javascript中有权访问全局变量时,将全局变量传递给自调用函数的目的是什么?

例如,

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

当窗口有权访问全局窗口对象而不将其传入时,引用窗口作为此自调用函数的参数的目的是什么?

2 个答案:

答案 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)

在你展示的例子中根本没有意义。但它确实在自动执行功能中创建范围,用于非全局变量。