【发布时间】:2012-02-21 03:30:52
【问题描述】:
第一个
(function() {
var slice = Array.prototype.slice,
aArguments = slice.apply(arguments);
})(10, 20, 30);
第二个
(function() {
var aArguments = [].slice.apply(arguments);
})(10, 20, 30);
有什么区别?
只有速度?
【问题讨论】:
-
"只有速度?"这甚至有速度差异吗?
-
@Thilo 确实如此。
Array.prototype.slice比[].slice快 -
@Raynos——可能是因为第二个需要在每次计算表达式时创建一个新的(无用的)数组实例。更好的比较将使用
slice = [].slice;但这不是 OP。对于一次性执行,这并不重要。 -
@RobG 即使它没有创建无用的实例,它仍然要检查 Array 对象是否有自己的名为
"slice"的属性,然后获取该对象的[[Prototype]],然后获取Array.prototype.slice的函数 -
对于单个操作,比较是
[].slicevsArray.prototype.slice。数组位于全局对象上,因此需要 3 次查找才能到达slice。最大的不同是必须为[].slice创建一个数组,这减少了一次查找(假设不需要搜索[[Prototype]])。
标签: javascript