JS作用域 变量提升

一、全局变量

  • 申明在函数之外的变量
  • 申明变量时凡是没有var关键字,而直接赋值的变量均为全局变量

二、局部变量

  • 申明在函数体中的变量,并且只能在当前函数体内访问

三、实例

  1. function test() {

    ​ a = 30; //没有用var声明变量,为全局变量

    ​ var b = 20;

    ​ }

    test();

    console.log(“a=”+a); //这里很明显,a为全局变量 输出a=30

    console.log(“b=”+b);//b为局部变量,故在函数test外调用是,提示未定义

  2. var a = 1;

    function test() {

    ​ console.log(“a=”+a); //这里a为undefined

    /函数中声明的变量在整个函数中都有定义。如果函数内部有定义变量,即使在定义之前输出但会先执行后面定义语句,然后判断输出结果,所以说声明的变量在整个函数中都是起作用的。/

    ​ var a = 2;

    ​ }

    test();//输出undefined

  3. 局部变量a可以覆盖全局变量a

    var a=1;

    ​ function main(){

    ​ var a=2;//局部变量

    ​ console.log(a);// 覆盖输出2

    ​ }

    main();

    console.log(a);//1

  4. javascript没有块级作用域

    function test(){
    for(var i = 0 ; i < 3 ; i++){

    1
    //i=0,1,2,最后执行到i=3时退出循环

    }
    console.log(i);//3
    }
    test();

    与C、C++、java则会输出0

  5. 变量提升

    var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值
    console.log(global); // undefined
    global = ‘global’; // 此时才赋值
    console.log(global); // 打印出global

    function fn () {
      var a; // 变量提升,函数作用域范围内
      console.log(a);
      a = ‘aaa’;
      console.log(a);
    }
    fn();