面试题答案
一键面试- 作用域链的形成:
- 全局作用域:代码开始执行时,首先进入全局作用域。全局作用域中有
let func
声明。 outer
函数作用域:当调用outer
函数时,创建outer
函数作用域。在这个作用域中声明了变量a
并赋值为10,同时声明了inner
函数。outer
函数作用域的外部作用域是全局作用域。inner
函数作用域:inner
函数在outer
函数内部定义,inner
函数作用域的外部作用域是outer
函数作用域。- 作用域链是从当前执行的作用域开始,沿着嵌套的函数作用域向上,直到全局作用域形成的链条。所以这里的作用域链为:
inner
函数作用域 ->outer
函数作用域 -> 全局作用域。
- 全局作用域:代码开始执行时,首先进入全局作用域。全局作用域中有
- 闭包依赖作用域链实现对外部变量的访问:
- 闭包形成:
outer
函数返回了inner
函数,并且inner
函数在outer
函数外部被调用(func()
),这就形成了闭包。 - 访问外部变量:
inner
函数在访问变量a
时,由于自身作用域中没有a
,它会沿着作用域链向上查找。作用域链使得inner
函数能够找到outer
函数作用域中的a
变量并访问其值。即使outer
函数已经执行完毕,其作用域因为被inner
函数(闭包)引用而不会被垃圾回收机制回收,从而保证了inner
函数始终可以通过作用域链访问到outer
函数作用域中的a
变量。
- 闭包形成: