重用物件而不是重新建立

例 A

var i,a,b,len;
a = {x:0,y:0}
function test(){ // return object created each call
    return {x:0,y:0};
}
function test1(a){ // return object supplied 
    a.x=0;
    a.y=0;
    return a;
}   

for(i = 0; i < 100; i ++){ // Loop A
   b = test();
}

for(i = 0; i < 100; i ++){ // Loop B
   b = test1(a);
}

環路 B 比環路 A 快 4(400%)倍

在效能程式碼中建立新物件效率非常低。迴圈 A 呼叫函式 test(),每次呼叫都返回一個新物件。每次迭代都會丟棄建立的物件,迴圈 B 呼叫 test1(),它需要提供物件返回。因此它使用相同的物件並避免分配新物件和過多的 GC 命中。 (GC 未包含在效能測試中)

例 B

var i,a,b,len;
a = {x:0,y:0}
function test2(a){
    return {x : a.x * 10,y : a.x * 10};
}   
function test3(a){
    a.x= a.x * 10;
    a.y= a.y * 10;
    return a;
}  
for(i = 0; i < 100; i++){  // Loop A
    b = test2({x : 10, y : 10});
}
for(i = 0; i < 100; i++){ // Loop B
    a.x = 10;
    a.y = 10;
    b = test3(a);                
}

迴圈 B 比迴圈 A 快 5(500%)倍