gpt4 book ai didi

javascript 函数对象的 [[scope]] 属性?

转载 作者:行者123 更新时间:2023-11-28 01:55:42 24 4
gpt4 key购买 nike

好的,这是一些代码

function myFunc(){
var myvar = 8;
function myFunc2(num){
alert(myvar+num);
}

myFunc2(2);

}

myFunc();

我想理清思路,如果有错请纠正

我已经阅读了堆栈溢出中的很多文章,但我想知道我是否理解它,或者我应该阅读更多内容。

据我了解,幕后发生的事情是in global execution context there it creates function object with the name myFunc` 及其 [[scope]] 属性分配给全局变量对象。

当我打电话myFunc时它创建自己的执行上下文和激活对象,其中所有函数的参数和函数声明都在任何逐行代码执行之前初始化。

当创建内部函数对象时,它的内部 [[scope]] 属性被分配其外部执行上下文的变量对象 + 全局变量对象的值,因此每个函数都会创建自己的执行上下文,但在此之前每个函数的内部 [[scope] ] 属性首先被赋值。

我已经阅读了堆栈溢出中的很多文章,但我想知道我是否理解它,或者我应该阅读更多内容。

最佳答案

以下是基于我对规范的理解以及您的解释中听起来不清楚的内容的一些提示:

  • ECMAScript 3 中使用了术语“激活对象”,但当前版本的规范中不再使用。 ES5 使用术语“词法环境”来表示由“环境记录”值以及可能对外部词法环境的引用组成的类型(内部类型)。

  • 由于对外部词法环境的引用,作用域可以被认为是一条链。因此,对外部作用域(包括全局作用域)的访问是通过该链进行的。 (当你说“[[scope]]属性被分配其外部执行上下文的变量对象+全局变量对象的值”时,听起来两条记录都被复制到当前函数的词法环境中,但事实并非如此。 )

希望这有帮助!

关于javascript 函数对象的 [[scope]] 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19173865/

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