我最近遇到了一个JavaScript脚本,其中作者似乎试图避免代码中的字符串并将所有内容分配给变量。
所以而不是
document.addEventListener('click', (e) => { /*whatever*/ });
他会写
var doc = document;
var click = 'click';
var EventListener = 'EventListener';
var addEventListener = `add${EventListener}`;
doc[addEventListener](click, (e) => { /*whatever*/ });
虽然将document
缓存到变量中可以被视为微观优化,但我真的很想知道这种做法是否还有其他好处 - 可测性,速度,维护等等?
传统的IE attachEvent
应该已经死了,因此能够快速使脚本仅在这些环境中运行,我认为很难被视为优势。
答案 0 :(得分:1)
你给出的例子看起来很奇怪,我无法想象大多数这些动作的任何“良好练习”理由。我的第一个猜测是,这是一个不确定他们在做什么的人的工作,虽然他们也使用ECMAScript 6语法很奇怪。
另一种可能性是这是生成的代码(例如某种可视编程工具的输出,或者是缩小器)。在这种情况下,通常会看到这种过度的因子分解,因为代码是从保守编写的模板生成的,以防止错误;我正在考虑C中的预处理器宏如何自由地使用括号。
有时,变量声明的编写方式使编译器和/或读取器清楚地知道变量包含哪种类型的数据。例如,asm.js代码使用不必要的变量声明作为在常规JS上实现强类型变量的技巧。有时候声明是作为一种形式的文档编写的(如果你看到foo
,可能会告诉你 var foo = 0.0
是一个弧度角,因为否则作者会刚写过var click='click'
)。但这仍然无法解释{{1}}。