一个关于js优化的思考

关于函数变量以下两个例子哪个会更优化一点

var i = 0, len = 1000*1000*1000, x = 2, y = true, z ='3.2';
//demo0
var demo = function(a, b, c) {
    return a*b*c;   
};
console.time('demo0');
for (i = 0 ;i < len; i++) {
    demo(x, y ,z);
}
console.timeEnd('demo0'); 
//demo1
var demo = (function(a, b, c) {
    return a*b*c;   
}).bind(null, x, y ,z);
console.time('demo1');
for (i = 0 ;i < len; i++) {
    demo();
}
console.timeEnd('demo1'); 
//demo2
demo = function() {
    var a = x,
        b = y,
        c = z;
    return a*b*c;   
};
console.time('demo2');
for (i = 0 ;i < len; i++) {
    demo();
}
console.timeEnd('demo2');

这三个例子的区别在于变量。
实际上第三种最快。为什么呢?
我在nodejs里执行的结果

clipboard.png

在浏览器中执行的结构

clipboard.png

阅读 1.9k
2 个回答

把len放大(最起码到万数量级),再运行代码,看结果。500次的运行偶然性太高了。

浏览器下执行 len = 100010001000 次数 (引用和内嵌 差不多)
demo_0: 2446.34716796875ms
demo_1: 2433.719970703125ms
demo_2: 2428.6591796875ms

node下执行
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题