您的位置:首页 > Web前端 > JavaScript

4.2 Javascript之执行环境和作用域

2018-03-15 21:31 162 查看
执行环境

每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

//书中说我们自己编写的代码无法访问这个对象

//下面这个最外层的执行环境window对象是可以访问的呢???

web浏览器中,最外层的执行环境是window对象,因此所有的全局变量和函数都是作为window的属性或者方法创建的

作用域链

作用域链的用途是保证执行环境对有权限访问的变量和函数的有序访问

作用域链的前端都是当前执行代码所在环境的变量对象

如果这个环境是函数,则将其活动对象作为变量对象,活动对象在一开始的时候只包含了arguments对象,作用域链中的下一个变量对象来自于包含(外部)环境,再下一个变量对象则来自于下一个包含(外部)对象。。。一直延伸到全局执行环境(全局执行环境的变量对象始终是作用域链中的最后一个对象)

var globalColor = "globalColor";
function globalFunc(){
//这里能访问函数里的变量和方法,但是不能访问innerFunc函数里的变量
var globalColor = "globalFuncColor";
function innerFunc(){
//这里可以访问此函数里的所有变量和方法,还有外部的所有变量和方法
var innerFuncColor = "innerFuncColor";
var globalColor = "globalColor-innerFuncColor";
innerFuncColor = globalColor;
console.log(innerFuncColor)
}
console.log(globalColor)
innerFunc();
}
globalFunc();
console.log(globalColor)
//globalFuncColor
//globalColor-innerFuncColor
//globalColor
//优先访问当前执行代码环境的变量对象


延长作用域链

执行环境的类型:全局和局部(函数)

function buildUrl(){
var href = "test.com";
with(location){
var res = href + href;
}
return res;
}
buildUrl();
//width里的href代表的是location.href,所以结果里并没有"test.com"


try{
console.log(myTest)
}catch(ex){
console.dir(ex.message);
};
// 对于捕获来说会创建一个新的变量对象,包含的是被抛出来的错误对象的声明
// 意思应该是新创建的执行环境下可以访问到抛出的错误对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: