问答详情
源自:-

这里的this,为什么指向的是全局变量

var x =4;

     obj={

         x:3,

         bar:function(){

var x=2;

setTimeout(function(){

    var x=1;

     alert(this.x);

     },1000);

   }

};

obj.bar(); //4


提问者:会飞的柠檬 2016-01-03 16:01

个回答

  • 堂堂堂堂糖糖糖童鞋
    2016-01-03 18:27:16
    已采纳

    在JavaScript中,我们可以通过重新声明JavaScript变量,来覆盖原来那个同名变量:

    第一个x其实是window对象的属性,

    第二个x指的是obj对象的属性,可以通过obj.x调用,

    第三个x指的是bar函数中的局部变量,只能在bar函数中,才有效!

    第四个也是局部变量,不同的是setTimeout()这个函数是window对象的方法。

    那么this又是谁呢?this指的是调用当前函数的那个对象的x属性!那个对象指的是window,所以,x指代的是第一个x,也就是全局变量!

    你可以运行以下代码,以便更好理解!

    <script>
            var x =4;
            var x = 5;
            alert(window.x);//5
             obj={
                 x:3,
                 bar:function(){
                        var x=2;
                        setTimeout(function(){
                            var x=1;
                             alert(this.x);//4
                             alert(window.x);//4
                             },1000);
                         alert("obj-bar-x--->"+x);//2
                   }
                };
            obj.bar(); //4
            alert("obj.x--->"+obj.x);//3
        </script>