面试题答案
一键面试- 闭包对作用域链的依赖:
- 在JavaScript中,函数在创建时会生成一个作用域链。作用域链由函数的词法环境和其上层的词法环境(父级作用域等)组成。闭包是指有权访问另一个函数作用域中变量的函数。当内部函数在外部函数返回后依然存在时,闭包就形成了。闭包依赖作用域链是因为它需要通过作用域链来访问外部函数的变量。即使外部函数执行完毕,其作用域也不会被销毁,因为闭包对其存在引用,闭包通过作用域链可以找到外部函数作用域中的变量。
- 举例说明闭包访问外部函数变量:
function outer() {
let outerVariable = 10;
function inner() {
return outerVariable;
}
return inner;
}
let closureFunction = outer();
console.log(closureFunction());
在上述代码中,outer
函数定义了一个变量outerVariable
,并返回一个内部函数inner
。当outer
函数执行完毕返回inner
函数后,inner
函数形成了闭包。inner
函数通过作用域链访问到了outer
函数作用域中的outerVariable
变量,所以closureFunction()
调用时能正确返回10
。