大步流星

导航

JS全局变量与局部变量

一句话概括:在函数外声明的变量都为全局变量,在函数内声明的为局部变量。

一、局部变量和全局变量重名会覆盖全局变量

var a = 1;  
 function test1() {  
   var a = 2;  
   alert(a);  
 }  
 test1();// 2  

这里的函数中的定义的a是局部变量,它的作用域为函数{}之间,函数外定义的a为全局变量,它的作用域为整个程序(描述有点不准确)。在函数中的局部变量和全局变量重名,局部变量会覆盖全局变量。



二、提到全局变量与局部变量不得不说明的一个知识点就是变量提升
JS引擎的工作方式是,先获取所有被声明的变量再逐一执行,所有变量的声明语句都会被提升到当前代码块的头部’。注:代码块指的是function的一个{},通常的if、while、for的{}中变量不会提升。
var a = 1;  
function test1() {  
    alert(a);  
    var a = 2;  
    alert(a);  
}  
test1();   
alert(a);//undefined  2  1

为什么结果不是1 2 1呢?原因就在于代码提升。由于代码提升的效果所以实际执行的代码是这样的:

var a = 1;  
function test1() {  
   var a;//局部变量与全局变量重名时会覆盖全局变量,此时的a只有声明却未定义  
    alert(a);//所以执行alert值为undefined  
    a = 2;  
    alert(a); 
}  
test1();  
alert(a);//undefined  2

posted on 2018-12-04 20:38  大步流星  阅读(2819)  评论(0编辑  收藏  举报