旧JS执行环境和范围

旧JS执行环境和范围
首先,我们需要知道,环境的实施和行动的范围是两个完全不同的概念。

函数的每个调用都有一个紧密相关的范围和执行环境,从根本上讲,作用域基于函数,执行环境基于对象(例如:全局执行环境、窗口对象)。

换句话说,范围涉及到调用的函数变量的访问,和不同的调用场景不同,执行环境一直是该关键字的值,这是一个参考,当前代码的对象。每个执行环境与它相关的一个变量,所有的变量和对象,环境中的功能定义都存储在这个对象。虽然我们写无法访问该对象的代码,解析器使用它在后台处理数据时。

执行环境(也称为执行上下文-执行上下文)

当Javascript解释器初始化执行代码时,它首先默认进入全局执行环境。从现在起,函数的每一次调用都会创建一个新的执行环境。

每个函数都有它自己的执行环境。当执行流进入一个函数,该函数的环境推到一个环境栈(执行堆栈)。在函数结束后,栈中弹出其环境和返回控制到以前的执行环境。在ECMAscript程序的执行流程是由方便的机制控制。

执行环境可以分为两个阶段:创建和执行。在创作阶段,解析器首先创建一个变量对象(可变对象,也被称为主动对象激活的对象),它是由变量、函数的声明,并在执行环境定义的参数。在这个阶段,作用域链初始化后,对这个值将被完成。在执行阶段,代码解释执行。

演示:
功能FN1(){
功能Fn2(){
警报(文档。身体。tagname); / /身体
其他代码…
}
(FN2);
}
(FN1);
这里的代码
总结

当Javascript代码被浏览器加载时,默认的第一个条目是全局执行环境。当一个函数在全局执行环境中被调用时,程序流被输入到调用函数中。此时,js引擎为函数创建一个新的执行环境,并将其压到执行环境堆栈的顶部。执行完成后,执行环境将从堆栈顶部弹出,然后进入执行代码的执行环境。这样,堆栈中的执行环境依次执行,并在返回到全局执行环境之前弹出。

此外,还应注意以下几点:

Single thread

同步执行

唯一的全局执行环境

本地执行环境的数量没有限制。

每次调用函数时,都会创建一个新的本地执行环境,即使函数本身被多次调用,也就是说,函数多次调用,它将创建许多不同的本地执行环境。

行动范围

在环境中执行代码时,为变量对象创建一个域链(范围链),范围链的使用是为了确保有权访问执行环境的所有变量和函数的有序访问。

范围链包含与执行环境堆栈中的每个执行环境相对应的变量对象。通过一系列操作,可以确定变量的访问和标识符的分辨率。

注意:全局执行环境中的变量对象始终是范围链的最后一个对象。

在访问变量时,必须有可见性问题。内层可以访问在外层的变量和函数,而外层无法进入内层的变量和函数。此外,访问一个变量或函数调用时,Javascript引擎将与一个列表结构规则,根据对象有不同的执行环境变量,一个访问一个变量时,在第一个变量对象列表的第一搜索,如果没有找到继续搜索第二可变对象,直到搜索到全局执行环境的变量对象的窗口对象。这也形成概念的范围链。
范围链映射,明确表达式与执行环境范围之间的关系(一一对应),范围与范围(列表结构,自顶向下关系)之间的关系。

演示:
var蓝色;
功能换色(){
无功anothercolor =红色;
功能swapcolors(){
无功tempcolor = anothercolor;
anothercolor =颜色;
颜色= tempcolor;
/ /在这里你可以访问的色彩,anothercolor,和tempcolor
}
/ /这里可以访问颜色和anothercolor,但不能访问tempcolor
swapcolors();
}
ChangeColor();
这里只能访问颜色
console.log(颜色是现在+颜色);
上面的代码执行环境包括三:全局执行环境的变色,当地执行环境(),和swapcolors当地执行环境()。

全球环境有变色和变色()函数;

变色的当地环境()函数有一个anothercolor属性和swapcolors功能。当然,换色功能可以访问本身及其外围变量(即全球环境)。

在swapcolor当地环境()函数,有一个变量tempcolor。函数内,在两个环境中的所有变量(换色和窗口)可以访问,因为这两个环境是其母公司的执行环境。

上面的代码的范围链如下图所示:
从上面的图片中可以看出,内部环境可以通过域链访问所有外部环境,但是外部环境不能访问内部环境中的任何变量和函数。

标识符解析(变量名或函数名搜索)是在操作链的第一级搜索标识符的过程,搜索过程从范围链的前端开始,然后逐步向后(全局执行环境)直到找到标识符为止。

执行环境与行动范围的区别与联系

执行环境是全局执行环境和本地执行环境,本地执行环境是在函数执行过程中创建的。

作用域链是基于环境变量实现的对象,所有的执行环境变量(目标函数为目标的活动,因为函数的执行环境,可变对象不能直接访问,活动对象(活动对象,简称AO(VO)是可变对象的作用)在一起。)。

当代码在一个环境中执行,一系列的可变对象的行动是创造。一个产业链的使用:所有的变量和函数有权访问的执行环境,一个有序的访问。作用域链的前端是可变对象环境中的代码目前正在执行的。

小练习
(函数(){())
a = 5;
console.log(窗口。一个); / /未定义
var = 1;这里将增强变量声明。
console.log(一); / / 1
});
窗口A未定义的原因是因为var a = 1;变量声明已经被提出来了。它相当于下面的代码:
(函数(){())
var是一个局部变量。
a = 5;在本地环境A中,它们不会找到全局。
console.log(窗口。一个); / /未定义
a = 1;这里将增强变量声明。
console.log(一); / / 1
});
这是小编辑器带来的本机js执行环境和范围的全部内容。我希望你能支持得更多。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部