gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:00:33 24 4
gpt4 key购买 nike

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

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

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

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

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

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

更新:

解释减少 42 个字节:

  • 数学 = 4 个字符
  • 1 个字符 = 1 个字节
  • 14 次 Math = 56 字节
  • 缩小后数学将被单个字符取代
  • 因为函数可以定义为 function($, w, d, m, u)
  • 14个字符的短词Math(m) = 14 bytes
  • 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com