JavaScript执行环境与作用域

2020-06-03 15:46

JavaScript执行环境定义了变量或函数可以访问的其他数据,并决定了它们各自的行为。在环境中执行代码时,会创建变量对象的范围链和范围链,以确保有序地访问执行环境可以访问的所有变量和函数。

执行上下文:1定义变量或函数可以访问的其他数据,并确定它们各自的行为

结束变量对象每个执行环境都有一个与之关联的变量对象。环境中定义的所有变量和函数都存储在这个对象中。虽然我们编写的代码不能访问这个变量,但是解析器在处理数据时会在后台使用它。

结束全局执行环境全局执行环境是最外层的执行环境。根据实现ECMAScript的主机环境,表示执行环境的对象是不同的。在网页浏览器中,全局执行环境被视为一个窗口对象,因此所有全局变量和函数都被创建为窗口对象的属性和方法。

执行环境生命周期:在执行环境中的所有代码被执行后,环境被破坏,存储在环境中的所有变量和函数定义也被破坏。

每个函数都有自己的执行环境。当执行流进入一个函数时,该函数的环境被推入一个环境堆栈。函数执行后,堆栈弹出其环境,并将控制返回到前一个执行环境。

结束范围链(范围链)当代码在环境中执行时,它为变量对象创建一个范围链。范围链的目的是确保有序地访问执行环境可以访问的所有变量和函数。

作用域链的前端总是当前执行代码所在环境的可变对象。如果环境是一个函数,那么它的激活对象就是一个可变对象。活动对象最初只包含一个变量,即参数对象(该对象在全局环境中不存在)

范围链中的下一个变量对象来自包含环境,而下一个变量对象来自下一个包含环境。这样,它将继续到全局执行环境。全局执行环境的变量对象总是范围链中的最后一个对象。

标识符解析是沿着范围链逐级搜索标识符的过程。搜索总是从范围链的前端开始,然后逐步返回,直到找到标识符。如果没有找到,将报告一个错误。

样本代码:

var clolor = & quot蓝色;

函数changeColor(){

如果(color = = = & quot蓝色){

颜色= & quot红色;

}其他{

颜色= & quot蓝色;

}

}

ChangeColor();

console.log颜色:+颜色);

上面,函数changeColor()的作用域链包含两个对象:

-它自己的变量对象(第一个是arguments对象)

-全球环境的可变对象

窗户

| -颜色

| -更改颜色()

变量颜色可以在函数内部访问,因为它可以在这个范围链中找到。 内部环境可以通过范围链访问所有外部环境,但是外部环境不能访问内部环境中的任何变量和函数。这些环境之间的关系是线性和有序的。 每个环境都可以搜索范围链、查询变量和函数名;但是,不可能向下搜索范围链来进入另一个执行环境。

总共有两种执行环境

-全球

-本地(功能)

结束扩展作用域链当执行流进入以下任何语句时,作用域链将被延长(一个变量对象将被临时添加到作用域链的前端,在代码被执行后将被删除):

-try-catch语句的catch块创建一个新的变量对象,其中包含抛出的错误对象的声明

-with语句对将指定的对象添加到范围链中

END没有块级作用域JavaScript没有块级作用域,这意味着{}包含的代码没有自己的作用域,这意味着{}中定义的变量将被添加到当前的执行环境中,如if或f or语句。

对于(var I = 0;i<。10;i++){

做某事(I);

}

console . log(I);// 10

结束声明变量变量使用变量声明的变量会自动添加到最近的环境中,并且在函数中是局部的。如果变量在初始化时没有用var声明,变量将自动添加到全局环境中(在严格模式下,初始化未声明的变量将导致错误)。

结束说明在严格模式下,初始化未声明的变量会导致错误

联系我们

天津市西青区中北镇云锦世家南门55号
4007181001
30998@qq.com

庆典活动

商务会议

企业年会

展会展览