Javascript 为什么传入变量(作为引用)比访问闭包中定义的同一变量慢?

Javascript 为什么传入变量(作为引用)比访问闭包中定义的同一变量慢?,javascript,Javascript,鉴于: (函数(){ var项目=[1,2,3,4]; //在Chrome中,执行此操作需要约8-10毫秒。 对于(变量i=0;i

鉴于:

(函数(){
var项目=[1,2,3,4];
//在Chrome中,执行此操作需要约8-10毫秒。
对于(变量i=0;i

为什么对x()的调用比对y()的调用慢8-10倍?是因为变量解析不需要在执行y()时发生吗

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

函数日志(){
var div=document.createElement(“div”);
div.textContent=Array.prototype.join.call(参数“”);
文件.正文.附件(div);
};
(功能(){
var项目=新数组(10000000);
对于(j=0;j<20;++j){
var xStart=performance.now();
对于(变量i=0;i

body{font-family:monospace;}
您是如何分析代码以确定这一点的?在chrome开发控制台的设置中设置了
Show timestamps
标志,我添加了
console.log(new Date())
在每个for循环之前和之后调用,并观察到时间差。@digita1-anal0g您应该使用
console.time
console.timeEnd
来分析代码。我在Chrome或node中看不到明显的差异。由于一些优化问题,可能存在差异。为了更好地测试,请尝试
var items=Array(1000000)。您的两个测试用例都不应该需要1毫秒来执行——几微秒更像是这样。@DarrenH不,不是。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;
    }
})();