javascript - 将窗口传入 IIFE 和其他依赖项也来自窗口

标签 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)); // <--

与下面的变体相比,使用顶部变体有什么好处吗,后者基本上仍然可以访问相同的依赖项?

(function (window) {
    'use strict';

    //body

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

    //etc.
}(window));

最佳答案

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

关于javascript - 将窗口传入 IIFE 和其他依赖项也来自窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29764437/

相关文章:

Gradle:如何在多个版本中包含库以满足依赖关系

python - 为什么最好的做法是在 requirements.txt 中包含依赖项的依赖项?

javascript - 如何通过 JavaScript 更改线性渐变百分比?

python - 在多个文件和目录中使用Python OOP时,有助于理解分层继承

c++ - 顶级声明程序错误,但程序正常运行

python - super 会尝试 MRO 中的每个类吗

javascript - bootstrap.min.js 中的意外标记

javascript - 将 onchange 分配给对象并传递参数

javascript - 如何在点击时获取数据属性值?

build - CMake 依赖目标不存在