日期:2014-05-16  浏览次数:20488 次

javascript中作用于和new、this、var关键字
偶然看到javascript中有new关键字使用,且在用与不用的时候结果不尽相同


  <script>
  var temp = 1;
function Test(){
    this.temp = 10;//NO.1
    alert(this.temp);//NO.2
    alert(temp;)//NO.3

  }


new Test();//NO.4
Test();//NO.5
  </script>





如上代码在执行的时候会弹出四次,结果是:
10、1、10、10
如果把NO.1处代码改为 temp=10,结果变为:
undefined、10、10、10

下边根据自己理解作如下分析:
首先javascript中也有对象,有自己的属性,默认对象window,当在方法外部使用var 定义变量时相当全局变量,而在方法内部使用var定义的变量相当局部变量。



同时也可以使用new关键字生成对象,并作为当前操作对象 ,内部使用的this关键字只对该对象起作用;


因此上边例子可做如下理解:
通过var定义的temp变量属于全局变量,所以方法Test中NO.3处弹出是全局变量temp的值;
但是this.temp有两种情况,当我们通过NO.5处方式调用的时候,this代表window对象操作的是全局变量中的temp变量,然而我们通过NO.4处方式调用的时候,this指定的是当前对象,this.temp针对当前对象有效。
所以上边程序代码在不同情况会有不同的执行结果。




1 楼 iamwh 2012-10-10  
第一次的执行结果分明是 10,1,10,10
执行 NO.5  时 this 是window,this.temp = 10 相当于改变了全局变量 temp
2 楼 xiuluocd 2012-10-30  
iamwh 写道
第一次的执行结果分明是 10,1,10,10
执行 NO.5  时 this 是window,this.temp = 10 相当于改变了全局变量 temp

失误