闭包可以一直保持它们的执行上下文,即便是在嵌套的函数中或者是在外部函数返回后也是如此。试想一下下面这个示例代码:
function outer() { var x = 10; function inner() { console.log(x); } return inner; }
var closure = outer(); closure(); // 输出 10
在这个例子中,函数 outer 返回了另一个函数 inner,inner 保留了对外部函数的 x 变量的引用。即使 outer 函数已经执行完毕并退出了,inner 函数仍然可以访问 x 变量,因为 inner 函数形成了一个闭包并可以访问外部函数的作用域。如果试图访问 inner 函数之外的 x 变量,将会得到一个未定义的错误。
所以,闭包可以保持它们的执行上下文的级别是当前嵌套函数层次,或者是外部函数返回后的作用域。