js基础var

  •  定义变量带var和不带var的区别,相当于是一个变量
    console.log(a);//undefine
    var a = 12;
    console.log(a);//a=12
    console.log(window.a)//→window['a']
    

      顺便也在全局作用域中,相当于给全局对象window增加了一个属性名

  • 不带var,它就是window的一个属性
    console.log(a) //报错,uncaught exception
    a =  12;
    console.log(a);//12
    console.log(window.a)//12
    

      

  • 以后你是创建变量,最好带var
  • 在私有作用域中,带var和不带var
    • 带var
      function fn(){
         console.log(a);//undifine
         var a = 12;
         console.log(a);//12        
      }
      console.log(a);//报错 refrence error.a not defined
      

        在私有作用域中,没有类似window.a。 它就是私有作用域的一个变量

    • 不带var
      function fn(){
        a = 12;
       console.lg(a); // 12
      }
      fn();
      console.log(a);//12
      

        

    • 作用域链
      • 函数执行形成一个私有的作用域,有一个保护机制,可以保护私有变量,但是进入到私有作用域当中,首先变量提升(声明过的变量是私有的,没有声明过的就不是私有的),接下来代码执行,如果遇到一个私有变量,那么按照私有处理即可;如果遇到变量不是私有的,需要向它的上级作用域进行查找(上一级如果也没有,则继续向上找,一直找到window全局作用域止),我们把这种查找机制叫做“作用域链”

猜你喜欢

转载自www.cnblogs.com/endian11/p/9094550.html