例如
var w = document.getElementById;
var b = w('header');
var c = w('footer');
var d = w('body');
编辑:分号是另一个重要论点。我以为我会编辑这个问题很有趣。
修改:回复Andrey对其回答的评论。
“复制引用如何使JS编译器更有效?”
响应: JS编译器会缩短和/或混淆代码。如果有document.getElementById(..)
有40个来电,那么如果他们调用getById(..)
并将其重命名为O(..)
,则会更加紧凑。
“另外,当您处理html元素事件时,通常会指定一个js方法,并且在方法内部放置逻辑,而不是直接在html事件处理程序中 - 这不是必需的,而是一个好的做法”< / em>的
回复:我知道。但是我们有很多网络系统,他们很少完全遵循良好的做法。
“此外,使用内置方法直接使代码更具可读性” 回复:鉴于这两个例子,我认为后者更具可读性
document.getElementById('total').value = document.getElementById('subtotal').value + document.getElementById('salestax').value - document.getElementById('discount').value
document.getElementById('yousaved').value = document.getElementById('discount').value / (document.getElementById('subtotal').value + document.getElementById('salestax').value)
或
var byId = document.getElementById
byId('total').value = byId('subtotal').value + byId('salestax').value - byId('discount').value
byId('yousaved').value = byId('discount').value / (byId('subtotal').value + byId('salestax').value)
答案 0 :(得分:3)
你的意思是
var w = document.getElementById
Thsi链接详细解释了为什么不应该这样做:JavaScript function aliasing doesn't seem to work
答案 1 :(得分:0)
嗯,碰巧它甚至不能在Chrome中运行。我想我可以在发布之前对其进行测试。我得到TypeError: Illegal invocation
。
替代方案是
var byId = document.getElementById
只需使用
function byId(a) {return document.getElementById(a)}
这不是那么有效,但它更短,许多编译器在转换时都没有问题
function getElementById(id) {return document.getElementById(id)}
进入
function q(a){return document.getElementById(a)}
编辑:感谢Andrey:我现在知道第一个例子不起作用的原因是因为我正在将document.getElementById
更改为window.getElementById
。
以下工作在我的测试中,根据我正在阅读的内容,它应该可以在任何地方使用。
var d = document
d.i = d.getElementById
答案 2 :(得分:0)
实际上,事实证明,在使用gzip时,编译器的好处并没有用。 gzip在查找任何字符串时已经内置了重复数据删除功能。因此,如果每个文档实例后面都有一个点,它也会重复删除点。
事实上,如果你有一个带有字符串的变量,Google Closure Compiler将 - 默认情况下 - 用字符串本身替换对变量的所有引用,并删除变量并假设它将获利用gzip的帮助。
请参阅:https://groups.google.com/group/closure-compiler-discuss/browse_thread/thread/857bdaa095a8685e