闭包可以解决访问不再存在于执行栈上的父变量的问题。闭包是指一个函数可以访问其词法作用域之外的变量。在JavaScript中,函数可以作为参数传递、返回值或者存储在变量中,这使得我们可以创建闭包。
下面是一个示例代码,展示了如何使用闭包解决访问不再存在于执行栈上的父变量的问题:
function outerFunction() {
var outerVariable = 'I am from outer function';
function innerFunction() {
console.log(outerVariable);
}
return innerFunction;
}
var closure = outerFunction(); // 将innerFunction赋值给变量closure
closure(); // 输出"I am from outer function"
在上述代码中,innerFunction
是一个闭包,它可以访问 outerFunction
的词法作用域中的 outerVariable
变量。即使 outerFunction
的执行已经结束,closure
仍然可以访问和使用 outerVariable
。
通过使用闭包,我们可以在函数执行完毕后仍然访问父变量,避免了变量被销毁的问题。