gpt4 book ai didi

javascript - 函数的内部 [[scope]] 属性何时被赋值?

转载 作者:行者123 更新时间:2023-11-28 00:43:05 24 4
gpt4 key购买 nike

只是为了理清思路,如果我错了,请纠正我。好的,让我们举个例子:

function foo() {
var x = 1;
return function bar() {
console.log(x);
};
}

var b = foo();
b();

foo正在逐段代码执行时,控制流来到function bar(),根据我的理解,这就是的时刻bar.[[scope]] 已分配。 foo 在执行上下文中的作用域链被复制到 bar.[[scope]],它是 foo 的事件对象(词法)的集合来自 per ecma5 的环境)及其祖先的事件对象(如果有)(此处为全局)

这里有什么误解吗?

最佳答案

对,bar[[scope]]创建函数时分配;这是 §13.2 ("Creating Function Objects") 中的第 9 步.

你是对的,在这种情况下,bar当您按照代码的逐步顺序到达时创建

return function bar() {

...因为您使用的是命名函数表达式。 (如果它是一个函数声明,它就不会出现在分步代码中,但那是另一回事。)

bar[[scope]]设置为截至何时/何地 bar 处于事件状态的词汇环境被 build 。在您的代码中,这是函数表达式的词法环境,它也与当前调用 foo 的变量环境相同。 (因为没有像 with 这样有趣的事情)这由 §13 涵盖。讨论生产的地方

函数表达式:function 标识符 ( FormalParameterListopt ) { FunctionBody }

关于javascript - 函数的内部 [[scope]] 属性何时被赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com