如果您有以下功能:
function test() {
var hello = "hello world"
}
test();
test();
test();
hello 变量会重新创建三次吗?或者是否会存储值' hello world' 并且会创建变量但是每次都设置为指向内存中的相同位置?我也在现代浏览器/ JS引擎的上下文中提问。
答案 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?(提示:是的,它们具有内存效率)。