作用域
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 10 //当函数内部出现变量不带var 11 //1、先看函数内部有没有定义var这个变量,如果有就是局部变量 12 //2、如果函数内部没有定义var这个变量,找形参,形参如果有,当做局部变量处理 13 //3、如果形参也没有,那么找全局,全局有,那么就是在操作全局变量 14 //4、如果全局也没有,那么相当于在全局定义了一个变量(全局变量) 15 16 var a = 10; 17 var b = 20; 18 var c = 30; 19 var d = 40; 20 function fn(){ 21 var a = 100; 22 var b = 200; 23 var c = 300; 24 d = 400;//隔山打牛,把全局修改为400 25 e = 500 26 console.log(a,b,c,d); //100 200 300 400 27 console.log(e);// 500 函数调用之后,这一行相当于全局定义了一个变量 28 } 29 30 // console.log(e);//调用之前,e还没有定义呢, 31 fn(); 32 console.log(a,b,c,d,e); //10 20 30 400 500 33 console.log(e);//函数调用之后,这一行相当于全局定义了一个变量 34 35 </script> 36 </body> 37 </html>
函数作用域面试题
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 // var num = 10; 10 // function fun() { 11 // var num = 20; 12 13 // fun2(); 14 // } 15 16 // function fun2() { //函数定义时候作用域就定死了,函数的作用域和调用没关系 17 // console.log(num);//10 18 // } 19 // fun(); 20 21 22 var num = 10; 23 function fun() { 24 var num = 20; 25 26 function fun2() { 27 console.log(num);//20 28 } 29 30 fun2(); 31 } 32 33 34 fun(); 35 36 //函数定义时候作用域就定死了,调用的时候作用域链顺着作用域去查找,函数的作用域和调用没关系 37 </script> 38 </body> 39 </html>
//作用域链:
//和作用域完全不是一个东西
//作用域链描述的是程序查找变量的过程
//首先在自己的作用域当中去查找,如果查找不到,去到上级作用域去查找,查找就用
//查不到继续往上查找,直到找到真正的全局,找到就用,找不到报错(引用错误,这个变量没定义)
//作用域链的顶端 一定是全局;
//作用域链是真实存在的,我们后期是可以看到的
//作用域是函数定义好就存在的,而作用域链是函数调用的时候才有的;