javascript - 重新分配参数变量有什么意义?

标签 javascript

我意识到(出于性能原因)做类似...的事情很有用

function Abc(a, b, c) {
    var window = window;

所以当代码访问window时,并不需要沿着作用域链往上走,最终找到windowdocumentnavigator 等也可以这样做...

但我正在重写一些 MobiScroll jQuery plugin并发现了这个……

function Scroller(elm, dw, settings) {
    ...
    var elm = elm;
    var dw = dw;
    ... 

重新初始化 elmdw 以指向它们的参数变量有什么好处?

我读过很多关于访问 arguments 成本高昂的文章,但从未读过任何关于为什么这可能是好的做法的文章。

这样做有什么好处?

过去,我 deliberately removed此构造来自 MDN 文档。

最佳答案

> function Abc(a, b, c) {
>     var window = window;

So when the code accesses window, it doesn't need to go up the scope chain to finally find 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 将其声明为本地化。将此类标识符声明为局部变量没有任何效果。

Safari 的早期版本存在未传递值的形式参数问题,但那是很久以前的事了,只是在一个非常具体的情况下出现的问题。

关于javascript - 重新分配参数变量有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169386/

相关文章:

javascript - 如何防止点击标题栏

javascript - 如何选择不是 'this' 的元素?

javascript - 使用 jquery 双击图像时是否可以获取 div/img 的 ID?

javascript - Angular 2 : how to control the whole app with keyboard only?

javascript - 保存 JSON 文件以便稍后从中获取其他数据

asp.net - 我想将 Gmap 控件中的纬度和经度获取到文本框中

javascript - jquery .on 获取未捕获的 RangeError : Maximum call stack size exceeded

javascript - 如何使用 Javascript 将一个 HTML 标签放入另一个 HTML 标签

javascript - 如果选中里面的复选框,则更改 div 背景颜色

javascript - Jquery div 隐藏加载选择器值不起作用