zoukankan      html  css  js  c++  java
  • JS全局变量VAR和THIS

    (注意)JS全局变量VAR和THIS

    很多人都觉得在javascript声明一个变量,加var和不加var没有什么区别,实际上是一个错误的观点,如果在函数外面,也就是说在window区域加不加var确实是一样,因为都会是全局变量的效果,而如果在函数内部,加var就是局部变量,不加是全局变量。
    function test(){     var1 = 2;   alert(var1);      }  
    test();   alert(var1); 这样可以显示为2 function test(){     var var1 = 2;   alert(var1);      }   test();   alert(var1);
    则为变量未定义错误
    this多用于函数内部,它永远指向调用他的那个对象,看看下面的例子就明白了
    var test={    a:"test",            // a省略了this,不是私有的(var);    msg:function(){            // msg省略了this,不是私有的(var);      a="1234";            // a为全局变量,可以在最外边尝试alert(a),可以得到1234      alert(this.a);      var msg1= function(){         alert(this.a);      }      msg1();    }
    } test.msg(); 这样会分别显示 "test" ,"1234". 

    再举一个例子:

    var name = "The Window";    var object = {     name : "My Object",  
      getNameFunc : function(){      return function(){       return this.name;        };      }    };  
    alert(object.getNameFunc()());  //The Window

    但this也不是这么简单,在看看下面的例子 function test1()   {     this.var01 = "test"; }
    function test2()   {   alert(var01); }
    var a= new test1(); test1(); test2(); alert(a.var01);
    都可以得到"test".
    可以发现var01变量既是一个全局变量,又是test1内的成员变量。也就是说,如果在函数内部用this定义的变量,如果这个函数你不是直接来运行,而是作为一个类来new的话,虽然函数也要执行一遍,但里面的this定义的 变量是作为类的成员变量来定义的,也就是一个局部变量,上面的测试代码,如果去掉test1();  test2()运行就是未定义变量错误了。
    说到变量,最后提一下js变量无类型的说法,这个说法本身没有错,但js变量无类型,这话很模糊,有的人会理解成js 里面没有数据类型。这显然是错误的,js 里面也有数字,字符,布尔,类等数据类型。说变量无类型,指的是刚定义一个变量的时候,这个变量是没有类型的,当你给它赋值的时候,值是什么类型,那这个变量就是什么类型了

  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/hubing/p/3383899.html
Copyright © 2011-2022 走看看