function a() {
this.x = 1;
x = 2;
alert(x);
}

a();
alert(x);
2
2为什么alert(x)不是1,其作用域不是在windows吗?thix.x = 1也是windows作用域下啊。。第一个就无问题,因为被x = 2覆盖了;但第二个就有问题了

解决方案 »

  1.   

     直接执行 a(); a函数里的 this =window 
     所以
    this.x = 1;
     x = 2;   //局部未定义算全局的
    可以写成 
      window.x=1
      window.x = 2;
      

  2.   

    你没有定义函数里面的局部变量x,所以还算是全局的,改下就知道了
    function a() {
            this.x = 1;
            var x = 2;
            alert(x);
        }
         
        a();
        alert(x);
      

  3.   

    function a() {
            this.x = 1;//x是a的属性,赋值为1
            x = 2;//无var x是全局变量,赋值为2
            alert(x);//x前面没this,访问的是个变量,即全局变量x = 2
        }
         
        a();
        alert(x);//访问的是全局变量,若访问a的属性,必须alert((new a()).x);
      

  4.   

    this.x=1;是全局变量,它的值已经被x=2覆盖了,之后再被调用,所以输出是2
      

  5.   

    这样看看
    function a() {
        
        x = 2;
        this.x = 1;
        alert(x);
    }
     
    a();
    alert(x);
      

  6.   

    如果直接调用,this就是window,就有可能被覆盖
      

  7.   

    this.x = 1;// this 是 a 的实例