我一直在对函数对象的 [[scope]] 属性进行一些研究。[[scope]] 除了全局对象之外,还应该包含所有外部函数的变量对象。
在这里,从函数返回的最里面的Inner
函数应该包含分配给它的作用域链的两个Inner+Outer+Global
变量对象。但它只有Outer+Global
分配给它的作用域链的变量对象。
为什么Inner
返回函数的 [[scope]] 链中没有函数,而返回函数恰好是返回函数的直接父级。对这种行为有什么合适的解释吗?
function Outer(){
var a = 10
return function Inner(){
var b = 22
console.log('ball')
return function(){
console.log(a+b)
}
}
}
var oppa = Outer()()
console.dir(oppa)
结果 :