Javascript和内存,它是如何处理的?

时间:2017-10-22 11:31:42

标签: javascript

我认为一旦上下文不再存在,变量就会被破坏:

function foo () {
    let bar = "something"
    return bar
}

就像在这个例子中一样,我认为bar在函数执行后就被破坏了。

但是现在,我发现你可以用Javascript写这个:

function foo () {
  let bar = "something"
  return {
    print () {
        console.log(bar)
    }
  }
}

let f = foo()

f.print();

此代码打印“某事”。所以我现在想知道javascript如何处理它的内存。为什么bar在函数结束时不会被销毁?

现在,如果我写下这样的话:

function foo () {
  let bar = "something"
  let hugeVar = _.range(1,1000*1000*1000*1000) // A huge array
  return {
    print () {
        console.log(bar)
    }
  }
}

hugeVar是否还在内存中? Javascript如何决定保留什么以及不保留什么?

2 个答案:

答案 0 :(得分:0)

它叫做封闭。函数将记住对外部作用域中变量的引用。阅读更多信息。

答案 1 :(得分:0)

您提供的代码是closures的示例。

闭包是一个堆栈帧,在函数开始执行时分配,在函数返回后不释放(好像堆栈帧已分配)堆而不是堆栈!)

闭包会记住父范围