每次调用函数时,是否会重新创建函数中声明的字符串变量?

时间:2016-02-04 13:00:24

标签: javascript

如果您有以下功能:

function test() {
  var hello = "hello world"
}

test();
test();
test();

hello 变量会重新创建三次吗?或者是否会存储值' hello world' 并且会创建变量但是每次都设置为指向内存中的相同位置?我也在现代浏览器/ JS引擎的上下文中提问。

2 个答案:

答案 0 :(得分:4)

但是,您可以创建一个返回函数的IIFE(立即调用的函数表达式)。这样,每次调用返回的函数时都不会重新实例化。

var hi = (function() {
  var hello = "Hello world";

  return function() {
    return hello;
  }
}());

hi(); // "Hello world";

然而,这取决于您正在运行的解释器/ JIT编译器。他们的一些优化可以优化您的代码,不会每次都重新实例化......

答案 1 :(得分:2)

  

hello变量重建三次吗?

是的,当然。 (除非它被DCE)完全优化了

  

或者每次将'hello world'值存储在内存中的相同位置?

现在这是另一回事 - 字符串值。由于字符串是不可变的,并且不同的内存位置中相同值之间的差异是不可观察的,因此我们无法在不查看实现的情况下知道。对于这个问题,请参阅Do common JavaScript implementations use string interning?(提示:是的,它们具有内存效率)。