何时将变量传递给函数时进行评估?

时间:2015-06-13 19:19:19

标签: javascript function variables arguments

这可能是一个简单的问题,但我真的想知道答案。

传递给函数的参数计算一次并设置为局部变量,还是每次在函数内部使用时计算它们?

例如:

当你编写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类似但不同,因为它只是在计算值时会产生问题,而不是通过哪个值。

1 个答案:

答案 0 :(得分:1)

  

我的问题是,如果你将修改方法包装在一个函数中并将对象[i]传递给函数,那么对象[i]会被计算一次并在函数中设置为局部变量obj吗?

是。一旦价值通过,它就会通过。它不会每次都重新编译这个论点。

因此,代码A会更好&#34;但我真的怀疑它在很大程度上有所不同......