如何解决如果嵌套函数没有自由变量,它的内部[[Scope]]属性是否不包含外部函数的激活对象?
我正在尝试确定[[Scopes]]周围的以下行为是否符合JS规范或仅是Chrome Devtools的实现细节。
function foo() {
var c = 3;
function bar(a,b) {
return a + b;
}
return bar;
}
var bat = foo();
console.log(bat.prototype);
查看chrome devtools并导航至bat.prototype.constructor。[[Scopes]],我看到只有全局范围。
但是,如果a和b相反是foo的作用域提供的自由变量:
function foo() {
var a = 1;
var b = 2;
var c = 3;
function bar() {
return a+b;
}
return bar;
}
var bat = foo();
console.log(bat.prototype);
现在,devtools指示bat.prototype.constructor。[[Scopes]]除了全局范围外,还具有:Closure(foo){a:1,b:2}。另外值得注意的是,该对象中不包含c。
这仅仅是Chrome devtools的实现细节,还是函数的[[Scopes]]内部属性仅捕获其所需的细节(自由变量)?
我的猜测是,这只是Chrome devtools的实现细节。根据[[Scope]]上的此定义,该函数应存储其所有父级的整个变量对象。
[[Scope]]是所有父变量对象的层次结构链,这些父变量对象位于当前函数上下文之上;链将在创建时保存到函数中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。