我遇到了这个例子:
function countMyself() {
// Check to see if the counter has been initialized
if ( typeof countMyself.counter == 'undefined' ) {
// It has not... perform the initialization
countMyself.counter = 0;
}
// Do something stupid to indicate the value
alert(++countMyself.counter);
}
上面的代码段演示了“如何在javascript中实现静态局部变量”
我知道函数变量存储在堆栈中。有C
背景知识,我知道stack
中的变量很容易被后续的函数调用覆盖。
javascript似乎并非如此。
什么规则指定本地(函数)变量在程序生存期内的生存时间?
我是说Javascript中的stack
必须与stack
中的C, C++
具有不同的语义?
答案 0 :(得分:1)
要回答您的问题标题:
只要可访问局部变量就存在。通过关闭,他们甚至可以永远停留:
function noClosure() {
let local = 3;
//...
} // local gets recycled here
function closure() {
let local = 3;
return function inner() {
return local; // <- closured
}
}
var closured = closure();
// local exists here:
console.log(closured()); // 3
// but now it will get recycled:
closured = undefined;
在您的代码段中,它实际上不是局部变量,而是全局函数对象的属性,该属性在被删除,无法引用或引擎停止执行之前一直存在:
delete countMyself.counter; // property deletion
countMyself = somethingNew; // unreferencable