从窗口传入窗口到IIFE和其他依赖项

时间:2015-04-21 06:24:05

标签: javascript oop dependencies iife

为什么一些程序员传入全局window对象,我理解这是为了更好的性能和最小化的好处,还有来自完全相同的全局空间window的其他依赖对象/函数但传入通过另一个参数?

但是他们也使用了来自window的功能,他们没有明确传递,例如setTimeout()

(function (dependency1, dependency2, dependency3, dependency4) {
    'use strict';

    //body

    window.setTimeout(function() { // <--
        //body
    }, 1000);

    //etc.
}(window, window.document, window.AjaxRequest, window.util.padNumber)); // <--

使用top变体对以下内容有什么好处,基本上仍然可以访问相同的依赖项?

(function (window) {
    'use strict';

    //body

    window.setTimeout(function() {
        //body
    }, 1000);

    //etc.
}(window));

2 个答案:

答案 0 :(得分:2)

  1. 解释器不必遍历范围以查找依赖关系,它们只在当前范围内可用。
  2. 依赖项的位置/命名空间将来可能会更改,但如果您将它们作为参数传递,则只需更改传递的参数,而不是代码中的所有参数。
  3. 缩小,可以安全地重命名本地变量

答案 1 :(得分:1)

这样做是为了坚持OPEN / CLOSE范例。

  

开放/封闭原则陈述&#34;软件实体(类,模块,   功能等)应该是开放的,但是关闭   修改&#34;

要关闭修改,请将依赖项作为参数传递。这允许程序员即时更改它,而不必担心函数中没有使用它。