访问参数对象很贵..呵呵?

Pac*_*ier 10 javascript web-services

我听说很多人说访问参数对象很昂贵.(例子:为什么在JavaScript中不推荐使用arguments.callee.caller属性?)

顺便说一句,这句话到底意味着什么呢?是不是只是简单的属性查找访问参数对象?到底有什么大不了的?

Bor*_*sky 14

重要的是至少有两个方面:

1)访问arguments对象必须创建一个arguments对象.特别是,每次调用函数时,现代JS引擎实际上并不为参数创建新对象.它们在堆栈上传递参数,甚至在机器寄存器中传递参数.arguments但是,一旦触摸,他们就必须创建一个实际的对象.这不一定便宜.

2)一旦你触摸了arguments对象,JS引擎可以以其他方式执行的各种优化(例如,检测你从未分配给一个参数并优化该常见情况的情况)就会出现.对函数参数的每次访问,而不仅仅是对函数的访问arguments变得慢得多,因为引擎必须处理你可能已经通过参数搞乱的事实arguments.

  • Pacerier,通常一旦创建了`arguments`对象,你就会为各种操作变慢,但是有一些(特定于引擎的)异常.在Mozilla浏览器中,既没有`arguments.length`也没有`arguments`#`````````````````````````````````````````````````````````````````````` 并且在Mozilla中正在实施更多技巧,以避免在更多情况下创建"参数".但确切的细节是特定于引擎的.理想情况下,尽可能避免使用`arguments`. (2认同)