javascript中的local(function)变量存活了多长时间

时间:2018-08-13 15:06:13

标签: javascript

我遇到了这个例子:

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++具有不同的语义?

1 个答案:

答案 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