这可能是一个简单的问题,但我真的想知道答案。
传递给函数的参数计算一次并设置为局部变量,还是每次在函数内部使用时计算它们?
例如:
当你编写forLoop时,你应该设置一个使用迭代找到对象的变量:
for(var i = 0; i < objects.length; i++) {
var obj = objects[i];
obj.title = "title";
obj.description = "description";
}
如果您未设置obj
变量,则查找对象的操作将多次运行:
for(var i = 0; i < objects.length; i++) {
objects[i].title = "title";
objects[i].description = "description";
}
到目前为止,我已经了解到这很糟糕(虽然我猜测现代浏览器中的性能差异几乎无法察觉)。
我的问题是,如果你将修改方法包装在函数中并将objects[i]
传递给函数,那么objects[i]
会被计算一次并在函数中设置为局部变量obj
或者每次调用obj
时它会计算出来吗?
什么是更好的做法,代码A或代码B?
代码A:
function modify(obj) {
obj.title = "title";
obj.description = "description";
}
for (var i = 0; i < objects.length; i++) {
modify(objects[i]);
}
代码B:
function modify(obj) {
obj.title = "title";
obj.description = "description";
}
for (var i = 0; i < objects.length; i++) {
var obj = objects[i];
modify(obj);
}
更新:这个问题与this SO question类似但不同,因为它只是在计算值时会产生问题,而不是通过哪个值。
答案 0 :(得分:1)
我的问题是,如果你将修改方法包装在一个函数中并将对象[i]传递给函数,那么对象[i]会被计算一次并在函数中设置为局部变量obj吗?
是。一旦价值通过,它就会通过。它不会每次都重新编译这个论点。
因此,代码A会更好&#34;但我真的怀疑它在很大程度上有所不同......