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;
}
})();