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

Javascript 是否每次调用函数时都会重新创建函数中声明的字符串变量?,javascript,Javascript,如果您有如下功能: function test() { var hello = "hello world" } test(); test(); test(); hello变量会被重新创建三次吗?还是会存储值“hello world”并创建变量,但每次都设置为指向内存中的同一位置?我也是在现代浏览器/JS引擎的背景下问这个问题。是的 但是,您可以创建一个IIFE(立即调用的函数表达式),它返回一个函数。这样就不会在每次调用返回的函数时都重新实例化它 var hi = (function()

如果您有如下功能:

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

test();
test();
test();
hello变量会被重新创建三次吗?还是会存储值“hello world”并创建变量,但每次都设置为指向内存中的同一位置?我也是在现代浏览器/JS引擎的背景下问这个问题。

是的

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

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

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

hi(); // "Hello world";
但是,这可能会因运行的解释器/JIT编译器而异。他们的一些优化可以优化您的代码,使其不会每次都重新实例化…

是的

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

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

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

hi(); // "Hello world";
但是,这可能会因运行的解释器/JIT编译器而异。他们的一些优化可以优化您的代码,使其不会每次都重新实例化

hello
变量会被重新创建三次吗

是的,当然。(除非通过完全优化)

或者“hello world”值是否每次都存储在内存中的相同位置

现在这是一个不同的东西-字符串值。由于字符串是不可变的,并且不同内存位置中相同值之间的差异是不可观察的,因此我们不看实现就无法知道。有关该问题,请参见(提示:是的,它们是内存有效的)

hello
变量会被重新创建三次吗

是的,当然。(除非通过完全优化)

或者“hello world”值是否每次都存储在内存中的相同位置


现在这是一个不同的东西-字符串值。由于字符串是不可变的,并且不同内存位置中相同值之间的差异是不可观察的,因此我们不看实现就无法知道。关于这个问题,请参见(提示:是的,它们是内存高效的)。

我认为您必须参考特定JS引擎实现的规范。我认为您必须参考特定JS引擎实现的规范。