执行环境
每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
//书中说我们自己编写的代码无法访问这个对象
//下面这个最外层的执行环境window对象是可以访问的呢???
web浏览器中,最外层的执行环境是window对象,因此所有的全局变量和函数都是作为window的属性或者方法创建的
作用域链
作用域链的用途是保证执行环境对有权限访问的变量和函数的有序访问
作用域链的前端都是当前执行代码所在环境的变量对象
如果这个环境是函数,则将其活动对象作为变量对象,活动对象在一开始的时候只包含了arguments对象,作用域链中的下一个变量对象来自于包含(外部)环境,再下一个变量对象则来自于下一个包含(外部)对象。。。一直延伸到全局执行环境(全局执行环境的变量对象始终是作用域链中的最后一个对象)
var globalColor = "globalColor";
function globalFunc(){
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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
延长作用域链
执行环境的类型:全局和局部(函数)
function buildUrl(){
var href = "test.com";
with(location){
var res = href + href;
}
return res;
}
buildUrl();
try{
console.log(myTest)
}catch(ex){
console.dir(ex.message);
};
无块级作用域
for(var i = 0; i < 10; i++){
console.log(i);
}
console.log("now i is: " + i);
//now i is 10
//变量i定义在for循环里面,循环结束后,还是可以访问到变量i,并没有销毁
变量查找
var color = "red";
function getColor(){
return color;
}
console.log(getColor())
原文发布时间:2018年03月15日
本文来源CSDN博客如需转载请紧急联系作者