【发布时间】:2023-03-20 21:00:02
【问题描述】:
我不确定取消引用变量是否有用或何时有用(提高性能)。
var x = a.b.c.d[some_key].f;
while (loop) {
do_something_with(x);
}
似乎比
while (loop) {
do_somthing_with(a.b.c.d[some_key].f);
}
这是需要还是由智能 JavaScript 引擎自动完成?
但我的实际问题是我是否应该这样做,例如,在图书馆里。
(function() {
var slice = Array.prototype.slice;
Function.prototype.x = function x() {
var args = slice.call(arguments, 0);
...
};
})();
或者只是
Function.prototype.x = function x() {
var args = Array.prototype.slice.call(arguments, 0);
...
};
引擎无法自动改进这一点,因为它不知道Array.prototype.slice 是否会在运行期间发生变化。
那么:创建用于创建切片函数的本地引用的闭包是否会使脚本更快?或者额外的闭包范围是否比访问 Array 的属性“prototype”的属性“slice”慢?
【问题讨论】:
-
仅供参考,应该是
.slice.call(arguments, 0)。 -
jsperf.com 除非您对创建的变量数量感到非常疯狂,否则我会认为这是浏览器环境中的微优化。
-
...或只是
[].slice.call( arguments )。 -
仅供参考,
a.b.c.d["e"].f等于a.b.c.d.e.f -
过早的微优化是不好的。尤其是在没有真正需要的情况下。不过在图书馆里可能没问题。
标签: javascript closures dereference