定义:作用域即是能够产生作用的范围,每种语言都会存在作用域

分类:1、全局变量  2、局部变量(通常在函数体内)

    (使用var关键字声明的变量不是全局变量就是局部变量)

    全局变量:声明在函数外部的变量,在代码中任何地方都能访问到的对象拥有全局作用域。

      (1)最外层函数和在最外层函数外面定义的变量拥有全局作用域    

       var num = 100;//最外层函数外面定义的变量
            function fun(){
                console.log(num)
                var num1 = 200;//最外层函数内定义的变量
                function fun2(){
                    console.log(num1);
                }  
            }
            fun()

      (2)所有末定义直接赋值的变量拥有全局作用域,即没有使用var关键字声明的变量都是全局作用域 

       function fun(){    
                num = 100;
            }
            fun();   
            console.log(num)//输出结果:100,num未使用var关键字声明,为全局变量

      注意: 函数必须经过调用后才会被执行

      (3)所有window对象的属性拥有全局作用域

            function fun(){ 
                window.name = "internet";
                //window.location
            }
            fun() 

   局部变量:声明在函数内部的变量

      function fun(){
            var num = 123;
            console.log(num);
      }
      fun();
      console.log(num)//报错,未定义

 

  局部变量的优先级要高于同名的全局变量,也就是说当局部变量与全局变量重名时,局部变量会覆盖全局变量

 

   var num = 1;    
   function func() {
      var num = 2;
       return num;
   }
   console.log(func());    //输出:2 

补充:变量提升

    用var关键字定义,所有变量会在该作用域的最前面进行声明;变量赋值,代码写在哪里就在哪里赋值

     变量声明提升,函数声明整体提升

posted on 2018-12-17 12:53  薇依  阅读(403)  评论(0编辑  收藏  举报