为了账号安全,请及时绑定邮箱和手机立即绑定

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

var x =4;

     obj={

         x:3,

         bar:function(){

var x=2;

setTimeout(function(){

    var x=1;

     alert(this.x);

     },1000);

   }

};

obj.bar(); //4


正在回答

1 回答

在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>


0 回复 有任何疑惑可以回复我~
#1

会飞的柠檬 提问者

谢谢解答
2016-01-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281119    人
  • 解答问题       1020    个

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信