闭包场景疑问:为什么函数传入的参数会被分配到闭包作用域
为什么参数
b会被分配到闭包作用域 我们可以从JS的作用域链和闭包的捕获规则来解释这个现象:
- 首先明确闭包的核心逻辑:当一个内部函数被返回并持有外部函数作用域中变量的引用时,这些被引用的变量不会随着外部函数执行上下文的销毁而回收,会被统一放到闭包作用域中保留。
- 你代码中
add函数的形参b,本身属于add函数的局部作用域变量。你返回的匿名箭头函数是add的内部函数,它直接引用了b,所以b符合闭包捕获的规则,会被归入add函数对应的闭包作用域。 - 而变量
a是在if块级作用域下用let声明的,属于add函数的外层作用域变量,不属于add的局部作用域,所以虽然箭头函数也引用了a,但它是沿着作用域链向上找到的块级作用域变量,不会被归到add的闭包作用域中,所以你观察到它属于块级作用域。
你可以做个简单的验证:如果把let a = 40的声明移到add函数内部,再运行代码就会看到a也会被归入闭包作用域。
内容的提问来源于stack exchange,提问作者Akki619
相关产品推荐
相关产品推荐

