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

//执行环境:执行环境(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

猜你喜欢

转载自blog.csdn.net/Goblin_E/article/details/84851627
今日推荐