zoukankan      html  css  js  c++  java
  • Javascript之全局变量和局部变量部分讲解

      以此文作为自己学习的一个总结。

          关于全局变量和局部变量的一句简单的定义:在函数外声明的变量都为全局变量,在函数内声明的为局部变量。

     

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

    1 var a = 1;  
    2 function test1() {  
    3   var a = 2;  
    4   alert(a);  
    5 }  
    6 test1();// 2  

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

     

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

    了解了变量提升了之后我们用以下代码来演示:

    1 var a = 1;  
    2 function test1() {  
    3     alert(a);  
    4     var a = 2;  
    5     alert(a);  
    6 }  
    7 test1();   
    8 alert(a);//undefined  2  1

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

     

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

     

  • 相关阅读:
    0x02 枚举、模拟、递推
    0x01 位运算
    bzoj3529: [Sdoi2014]数表
    bzoj5216: [Lydsy2017省队十连测]公路建设
    POJ1789Truck History
    最小生成树模板
    POJ1258Agri-Net
    POJ1860Currency Exchange(SPFA)
    POJ3083Children of the Candy Corn
    POJ2503Babelfish
  • 原文地址:https://www.cnblogs.com/wind-lanyan/p/wind-lanyan.html
Copyright © 2011-2022 走看看