我意识到(出于性能原因)做某些事情很有用......
function Abc(a, b, c) {
var window = window;
因此,当代码访问window
时,它不需要向上移动范围链以最终找到window
。 document
,navigator
等等也可以这样做。
但是我正在重写一些MobiScroll jQuery plugin并找到了这个......
function Scroller(elm, dw, settings) {
...
var elm = elm;
var dw = dw;
...
重新初始化elm
和dw
指向其参数变量有什么好处?
我已经阅读了很多关于访问arguments
费用昂贵的内容,但从未读过有关为什么这可能是一种良好做法的任何内容。
这样做有什么好处?
过去,我从MDN文档中deliberately removed这个结构。
答案 0 :(得分:3)
> function Abc(a, b, c) {
> var window = window;
因此,当代码访问窗口时,它不需要向上移动范围 链终于找到了窗口。
我认为这不是原因。对于在全局范围内声明的函数,在本地和全局范围内解析标识符的速度要快得多(并且可能更慢,具体取决于浏览器)。
脚本可能会使用类似于上面的内容来确保 window 引用预期的 window 对象而不是范围链上的其他窗口 ,例如
var fn = (function(window) {
// In here window is unequivocally a reference to the global object
}(this));
在第二个例子中:
> function Scroller(elm, dw, settings) {
> ...
> var elm = elm;
> var dw = dw;
> ...
声明变量完全是浪费时间。将标识符放在函数声明或表达式的形式参数列表中等同于声明它使用 var 进行localling。将这些标识符声明为局部变量无效。
有一个早期版本的Safari存在一个问题,它没有传递一个值的形式参数,但这是很久以前的事情,只是一个非常具体的问题。
答案 1 :(得分:0)
唯一合乎逻辑的原因是可能明确声明变量的范围。
除此之外,它只是增加了多余的代码。