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

js学习笔记-第二章变量、作用域和内存问题-执行环境和作用域

2018-12-06 12:54 363 查看

//执行环境:执行环境(execution context,为简单起见,有时也称为“环境”)是 JavaScript 中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为
//变量对象:。每个执行环境都有一个与之关联的变量对象(variable object),
//作用域链:当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。
//全局执行环境的变量对象始终都是作用域链中的最后一个对象
//最大的执行环境:window对象;当网页关闭或浏览器关闭时才会被注销

//示例
//解析:执行环境:window、changecolor()
//变量对象:window:color、changeColor()
//			changeColor:无
/*var color = "blue";

function changeColor() {
if(color === "blue") {
color = "red";
} else {
color = "blue";
}
}
changeColor();
alert("Color is now " + color)*/

//执行环境的类型有两种:最大的window环境和局部函数

//延长作用域链 with try...catch()
//with
//分析:with的作用,就是简化对象的使用,with代码块的内部,首先每个变量被当做局部变量,如果找不到该变量的定义,会找是不是该对象的属性
//由于with语句块中作用域的‘变量对象’是只读的,所以在他本层定义的标识符,不能存储到本层,而是存储到它的上一层作用域。
//延长作用域,所以可以返回url
/*	function bulider(){
var qs = "?debug=true";
with(location){
var url=href+qs;//url属于上一层环境的变量对象
}
return url;
//相当于
//var url=window.location.href+qs;
}*/

//没有块级作用域,只有全局作用域和函数作用域,除全局变量,和局部变量,其他变量都会被当作全局变量。
if(true){
var a="123";//if语句执行后,不会销毁,会将当前变量添加到当前执行环境中

}
console.log(a);//123
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: