javascript - 有多少全局变量适合传递给 IIFE 包装器?

标签 javascript jquery minify uglifyjs yui-compressor

将大量全局值传递给 IIFE 在多大程度上有意义?

据我所见,常见的事情就是传递 3(窗口、文档和未定义)。 但是...如果仅仅为了缩小而在代码中使用它们超过 10 次,那么传递更多内容是否有意义?

就我而言,我在代码中发现了 14 次全局变量 Math 。为了节省 42 个字节,将其传递给 IIFE 是有意义的。在这种情况下,这并不是很多,但是如果我们一点一点地对不同的全局变量进行求和,那么传递尽可能多的全局变量总是有意义的,对吗? (符号、对象、错误、日期、JSON...)

(function($, window, document, Math, undefined) {
    $.fn.mydemo = function() {

    };
}(jQuery, window, document, Math));

那么,为什么这不是一种常见的方法呢?

更新:

解释一下 42 字节的减少:

  • 数学 = 4 个字符
  • 1 个字符 = 1 个字节
  • 14 次数学 = 56 字节
  • 缩小后数学将被单个字符替换
  • 由于函数可以定义为 function($, w, d, m, u)
  • 缩写词 Math (m) 的 14 个字符 = 14 字节
  • 56 - 14 = 减少 42 字节

最佳答案

首先,这些值不是 IIFE。

这并不是通过在函数内使用较短的变量名称来“节省字符”(至少不是主要),而是关于变量查找以及与之相关的“成本”。

如果您要使用 f.e. document 在你的函数中而不传入它,那么首先会在函数的范围内搜索名为 document 的变量,只有当失败时,搜索才会在范围高于该范围,依此类推。

就是将此类对象作为参数传递到函数中的原因 - 以便在函数范围内存在对它们的直接引用,并且它们不必在更高的外部范围内查找。

有时,您甚至可能会看到它以如下形式使用:

(function(document) {
  // do something with document, such as:
  document.foo();
  document.bar = "baz";
})(document);

——以这种形式,应该更清楚这不是在变量名中保存字符。该对象在函数内部仍然被称为 document (这清楚地表明了它应该代表什么 - global document 对象),由此实现的唯一效果就是较短的查找。

关于javascript - 有多少全局变量适合传递给 IIFE 包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615068/

相关文章:

javascript - 我可以在幽灵博客条目中使用嵌入式 Javascript 吗?

javascript - 如何使用 javascript 动态隐藏元素?

javascript - QTip 入门

xml - SVG/XML : Remove unwanted XML/SVG www. w3.org/2000/svg 标签?

javascript - 将 JSON 转换为数组

javascript - 如何按 Angular 从本地存储中按日期键删除日期

javascript - 如何添加YouTube外部静音

jQuery 将元素集包装在 div 中

android - 在 Android Studio 中为 OpenCv 库启用 Gradle 缩小

javascript - 仅加载所需的 javascript 和 css