作用域

 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>

//作用域链:
//和作用域完全不是一个东西
//作用域链描述的是程序查找变量的过程
//首先在自己的作用域当中去查找,如果查找不到,去到上级作用域去查找,查找就用
//查不到继续往上查找,直到找到真正的全局,找到就用,找不到报错(引用错误,这个变量没定义)

//作用域链的顶端 一定是全局;
//作用域链是真实存在的,我们后期是可以看到的
//作用域是函数定义好就存在的,而作用域链是函数调用的时候才有的;

原文地址:https://www.cnblogs.com/fsg6/p/12782948.html