我一直在研究函数对象的[[scope]]属性。[[scope]]除了全局对象外还应该包含所有外部函数的变量对象。
这里,从Inner
函数返回的最内层函数应该包含分配给它的作用域链的Inner+Outer+Global
变量对象。但它只有Outer+Global
个变量对象分配给它的作用域链。
为什么返回函数的[[scope]]链中缺少Inner
函数,而该函数碰巧是返回函数的直接父函数。对此行为的任何合适解释?
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)
结果: