鍍金池/ 問答/HTML/ 一個關(guān)于js優(yōu)化的思考

一個關(guān)于js優(yōu)化的思考

關(guān)于函數(shù)變量以下兩個例子哪個會更優(yōu)化一點

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');

這三個例子的區(qū)別在于變量。
實際上第三種最快。為什么呢?
我在nodejs里執(zhí)行的結(jié)果

clipboard.png

在瀏覽器中執(zhí)行的結(jié)構(gòu)

clipboard.png

回答
編輯回答
冷溫柔

把len放大(最起碼到萬數(shù)量級),再運行代碼,看結(jié)果。500次的運行偶然性太高了。

2018年1月20日 03:48
編輯回答
不討喜

瀏覽器下執(zhí)行 len = 100010001000 次數(shù) (引用和內(nèi)嵌 差不多)
demo_0: 2446.34716796875ms
demo_1: 2433.719970703125ms
demo_2: 2428.6591796875ms

node下執(zhí)行
圖片描述

2018年1月27日 07:50