我意识到(出于性能原因)做类似...的事情很有用
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
成本高昂的文章,但从未读过任何关于为什么这可能是好的做法的文章。
这样做有什么好处?
过去,我 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/