JS的全局变量&局部变量

时间:2020-12-19 10:30:05
1 <script>
2     var i=10;  //全局变量
3     j = 20;    //全局变量
4 
5     function(){
6       var i=30; //局部变量
7        h = 40;  //全局变量 
8     }
9 </script>

由此可以总结一句话,在函数内部定义的就是局部变量,否则就是全局变量。

1   <script>
2     var i =10;
3     function display(){
4       //var i = 20;//局部变量只在局部作用域起作用
5       i= 30; //全局的,会将i的值修改为30
6     }
7     alert(i);//结果为10  30
8   </script>

在函数内的变量没有var 声明,则会直接影响全局变量。

为什么没有var的变量是全局的?

是因为,在js中,如果在某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,则调用;如果没有找到,继续向上查找,一直查找到全局作用域为止,如果全局作用域仍然没有这个变量的声明语句,那么就会自动在全局作用域中进行声明,这个就是js中的作用域链。

1   <script>
2    window.onload = function display(){
3       i= 30;
4     }
5     alert(i);
6   </script>

弹出的结果就是30

再看这个例子:

 1 <script>
 2    var i = 10;
 3     function fn1(){
 4       i=100;
 5       function fn2(){
 6         i=1000;
 7         function fn3(){
 8           i=10000;
 9         }
10         fn3();
11       }
12       fn2();
13     }
14     fn1();
15     alert(i);
16 </script>

执行的结果就是10000

如果现在把 fn1中的i值改成 var = 100;则弹出i的值为:10;

局部访问全局使用作用域链

全局访问局部可以使用闭包函数模拟