JavaScript从入门到精通(微视频精编版)
上QQ阅读APP看书,第一时间看更新

4.6 变量的作用域

视频讲解

变量的作用域是指变量在程序中的有效范围,在有效范围内可以使用该变量。变量的作用域取决于该变量是哪一种变量。

4.6.1 全局变量和局部变量

在JavaScript中,变量根据作用域可以分为两种:全局变量和局部变量。全局变量是定义在所有函数之外的变量,作用范围是该变量定义后的所有代码;局部变量是定义在函数体内的变量,只有在该函数中,且该变量定义后的代码中才可以使用这个变量,函数的参数也是局部性的,只在函数内部起作用。如果把函数比作一台机器,那么,在机器外摆放的原材料就相当于全局变量,这些原材料可以为所有机器使用,而机器内部所使用的原材料就相当于局部变量。

例如,下面的程序代码说明了变量的作用域的有效范围:

    01  var a="这是全局变量";          //该变量在函数外声明,作用于整个脚本
    02  function send(){               //定义函数
    03      var b="这是局部变量";      //该变量在函数内声明,只作用于该函数体
    04      document.write(a+"<br>");  //输出全局变量的值
    05      document.write(b);         //输出局部变量的值
    06  }
    07  send();                        //调用函数

运行结果为:

    这是全局变量
    这是局部变量

上述代码中,局部变量b只作用于函数体,如果在函数之外输出局部变量b的值将会出现错误。错误代码如下:

    01  var a="这是全局变量";           //该变量在函数外声明,作用于整个脚本
    02  function send(){                //定义函数
    03      var b="这是局部变量";       //该变量在函数内声明,只作用于该函数体
    04      document.write(a+"<br>");   //输出全局变量的值
    05  }
    06  send();                        //调用函数
    07  document.write(b);              //错误代码,不允许在函数外输出局部变量的值
4.6.2 变量的优先级

如果在函数体中定义了一个与全局变量同名的局部变量,那么该全局变量在函数体中将不起作用。例如,下面的程序代码将输出局部变量的值:

    01  var a="这是全局变量";       //声明一个全局变量a
    02  function send(){           //定义函数
    03      var a="这是局部变量";   //声明一个和全局变量同名的局部变量a
    04      document.write(a);     //输出局部变量a的值
    05  }
    06  send();                    //调用函数

运行结果为:

    这是局部变量

上述代码中,定义了一个和全局变量同名的局部变量a,此时在函数中输出变量a的值为局部变量的值。