为什么传入变量(作为ref)比访问闭包中定义的同一变量慢
Why is passing in a variable (as a ref) slower than accessing the same variable defined in a closure?
给定:
(function() {
var items = [1, 2, 3, 4];
// In Chrome, this takes ~8-10 ms to execute.
for(var i = 0; i < items.length; i++) {
x(items);
}
// In Chrome, this takes 1-2 ms to execute.
for(var i = 0; i < items.length; i++) {
y();
}
function x(y) {
y[0] = -100;
}
function y() {
items[0] = 100;
}
})();
为什么调用x((的速度比调用y((慢8-10倍?是因为在执行y((时不需要进行变量解析吗?
除了第一次迭代或第二次迭代之外,我没有看到时间上的差异,这表明除了在启动过程中添加了一些东西之外,没有什么大的差异。V8没有立即优化AFAIK,所以这可以解释为什么需要几次迭代才能平衡。还有缓存未命中。
function log() {
var div = document.createElement("div");
div.textContent = Array.prototype.join.call(arguments, " ");
document.body.appendChild(div);
};
(function() {
var items = new Array(10000000);
for (j = 0; j < 20; ++j) {
var xStart = performance.now();
for(var i = 0; i < items.length; i++) {
x(items);
}
var xDuration = performance.now() - xStart;
var yStart = performance.now();
for(var i = 0; i < items.length; i++) {
y();
}
var yDuration = performance.now() - yStart;
log(j, "x:", xDuration.toFixed(3) + "ms",
"y:", yDuration.toFixed(3) + "ms",
"diff:", (xDuration - yDuration).toFixed(3) + "ms");
}
function x(y) {
y[0] = -100;
}
function y() {
items[0] = 100;
}
})();
body { font-family: monospace; }
相关文章:
- 得到"全局未定义“;全局变量定义清楚时出错
- 使用变量的名称,然后为该变量定义函数
- Javascript 从 php 变量定义 getElementById()
- 使用变量定义宽度和高度
- 函数内部的JavaScript全局变量定义
- Javascript变量定义-澄清
- 为多个变量定义相同的类型,在Webstorm中识别
- 如何用变量定义一个数组,然后用一个数字填充每个数组
- 画布的奇怪行为 上下文变量定义位置导致选项卡处于非活动状态时画布呈现冻结
- 为什么要显式将变量定义为未定义
- Gulp/Grunt 获取触笔工作表中的所有颜色变量,并将它们作为变量定义写入文件
- 是否可以在 Node.js 中为模块变量定义 SET 函数
- ES6 块范围的变量定义作为条件
- 使用 jQuery 获取由变量定义的文本输入的值
- :gt()选择器,为变量定义的索引
- 如何在ASP.NET中将Javascript变量定义为Session
- 带有用户输入的ajax请求变量定义有问题
- 使用ElasticSearch搜索变量定义字段
- 变量定义,不同的输出
- JavaScript变量定义和范围