首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么传入一个变量(作为ref)比访问闭包中定义的相同变量要慢?

为什么传入一个变量(作为ref)比访问闭包中定义的相同变量要慢?
EN

Stack Overflow用户
提问于 2016-08-13 14:50:46
回答 1查看 68关注 0票数 2

给定:

代码语言:javascript
运行
复制
(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()的执行中发生?

EN

回答 1

Stack Overflow用户

发布于 2016-08-14 01:35:15

除了第一次迭代或第二次迭代之外,我没有看到时间上的差异,这表明除了在启动过程中添加了一些东西之外,没有太大的差异。V8 doesn't optimize immediately AFAIK,所以这可以解释为什么需要几次迭代才能平衡。还有缓存未命中。

代码语言:javascript
运行
复制
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;
    }
})();
代码语言:javascript
运行
复制
body { font-family: monospace; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38930051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档