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.log(a); // 12
      }
      fn();
      console.log(a);//12
      

        

    • 作用域链
      • 函数执行形成一个私有的作用域,有一个保护机制,可以保护私有变量,但是进入到私有作用域当中,首先变量提升(声明过的变量是私有的,没有声明过的就不是私有的),接下来代码执行,如果遇到一个私有变量,那么按照私有处理即可;如果遇到变量不是私有的,需要向它的上级作用域进行查找(上一级如果也没有,则继续向上找,一直找到window全局作用域止),我们把这种查找机制叫做“作用域链”
        • 如果上一级作用域有, 我们操作的都是上一级作用域的变量(假如我们在当前作用域值修改了,同时也就把上一级作用域的值给修改了)
        • 如果上一级作用域没这个变量(找到window也没有),分两种情况:
          •  1)变量=值,相当于给上一级作用域(一般都是window)设置了一个属性,以后再操作window下就有了
          • 2)alert(变量) ,想要输出这个变量,所有会报错

posted on 2018-05-26 22:19  endian11  阅读(132)  评论(0编辑  收藏  举报

导航