TL;DR -- 从内存管理的角度来看,这两种返回值的方法有什么区别?它们在游戏循环中进行管理,每秒修改数千次。
return { x: x1 + x2, y: y1 + y2, z: z1 + z2 }
// VS
predeclared.x = x1 + x2;
predeclared.y = y1 + x2;
predeclared.z = z1 + x2;
return predeclared;
感谢您的任何见解!
一些上下文......在某些情况下,在 webGL / three.js 程序中,预先声明一个虚拟引用是有益的,该引用将用于在每一帧临时保存一个对象,而不是创建一个新对象来帮助垃圾收集。我很确定这是一种常见的做法,但以防万一它看起来像这样:
let mesh;
while( true ) {
mesh = getNewMeshFrame( time );
renderStuff( mesh );
}
我不确定在以下情况下使用的正确技术。
// With just ONE predeclared object and an object literal in the return statement
function box() {
let box = { x: 0, y: 0 };
this.transform = function( addX, addY ) {
return { x: box.x + addX, y: box.y + addY };
}
}
// OR, with TWO predeclared objects
function box() {
let box = { x: 0, y: 0 };
let transformed = { x: 0, y: 0 };
this.transform = function( addX, addY ) {
transformed.x = box.x + addX;
transformed.y = box.y + addY;
return transformed;
}
}
我希望很明显,盒子对象是静态的并且不能改变(它是一个更复杂的对象 IRL),所以我需要将它与它的变换分开。谢谢!