js 作用域链

南楼画角 提交于 2020-02-04 06:51:37

作用域:变量开始创建到被系统回收的过程;
全局:在任意函数外创建的变量,
局部:在任意函数内创建的变量,
ES5:只用函数能够生成局部作用域,其他结构不可以
作用域链:现在当前作用域中查找,找到即执行,如果没有继续向上一次查找,找到即执行,如果找到全局中依然没有找到,报错,阻断程序运行。

			var a = 20;
			function Myfun(){
				a = 30;
				console.log(a + 10);
			}
			
			function Myfun_two(){
				a = 50;
				console.log(a + 20);
			}
			console.log(a); //20
			Myfun();		//40
			console.log(a); //30
			
			Myfun_two();  // 70
			
			console.log(a); //50

变量提升:如果使用了未声明的变量,正常情况会因找不到而报错,但是在使用下方出现了他的声明,会默认将他提升到使用之前,不包括值,先使用后声明,改变量会因变量提升可以找到,但是值为undefind;
存在意义:保证程序继续执行,只是失去了当前功能的值

		//第一题		
	var a="全局变量";
		function first(){
			var a="first";
			function second(){
				var a="second";
				console.log(a);  //  second
			}
		console.log(a);   //  first 
		second();
		}
		console.log(a);   //  全局变量
		first();   // ?		调用上面的结果才会结束
	

	//第二题	
	//作用域练习题
	var a="aa";
	function test(){
	    alert(a);   //  未定义undefiend  变量提升
		var a="bb";
		alert(a);  // bb
	}
	test(); //	
	console.log(a); //aa
	
		//第三题	
	var b="vv";
	function test2(){
	    console.log(b); //  正确vv 现在作用域内找(var b)没有就向函数外找(b="avv" 只是赋值吧上面
	    												//	var b="vv" 的值改变)var b="vv"
		b="avv";  
		console.log(b);  // avv
	}
	console.log(b);//	vv
	test2();//    
	console.log(b);// avv

	//第四题
		var a = 12;
		function fn(){
		console.log(a)  // 结果undefined因为下面有var,var a会被调用上去45则不会调用
					//上去 如果下面没有var只有a=45 则会去找上面的var输出12
		var a = 45;
		console.log(a) // 45
		}
		fn();

		function fu(){
		 console.log(11); // 11
		function ff(){
		console.log(22); // 22
		}
		ff()
		} 
		fu();

		var a = 12;
		function fc(){
			
		console.log(a);  // 结果undediend   return结束的是return下面的代码  本行输出console.log(a)
						//他的作用域会在函数中先寻找return并不影响发现下面有var a 会出现提升变量的情况
		return 4;		//4 为函数返回值的结果  有返回值下面要新建变量来接收
		var a = 45;
		
		}
		fc(); // 	
		var c=fc();			
		console.log(c);			//结果为4
	
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!