(五)执行环境及作用域

2019-03-05  本文已影响0人  萘小蒽
执行环境

1、执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。

2、每个执行环境都会有一个与之关联的\color{#34a853}{变量对象},环境中定义的所有变量和函数都保存在这个对象中,我们编写的代码无法访问这个对象,但是解析器在处理数据时候会在后台使用它。

3、每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个执行栈中。 在函数执行之后,栈将其环境弹出,把控制权返给之前的执行环境。

作用域链

1、当代码在一个执行环境中执行时,会创建\color{#34a853}{变量对象}的一个\color{#34a853}{作用域链}

2、\color{#34a853}{作用域链}的用途是保证对执行环境有权访问的所有变量和函数的有序访问。

作用域链的延伸

虽然执行环境的类型只有两种,全局和局部(es5函数),但是有其他办法来延长作用域链。

with语句它将指定的对象添加到作用域中。

function buildurl(){
   var qs = "?test = 1231";
        with(location){
           var  url = href + qs;
        };
}

with接收的是location对象,因此其变量对象中包含了location对象的所有属性和方法,而这个变量对象被添加到了作用域的前端。
try-catch语句也同理,不同的是catch会创建一个新的变量对象(error,ie9之后),里面包含了被抛出的错误对象的声明。(ie8以及之前的版本是添加到执行环境的变量对象,而不是catch语句的变量对象中,就是说在catch外部也能访问

上一篇 下一篇

猜你喜欢

热点阅读