js 作用域 this

don_123 发布于 2016/01/28 13:28
阅读 161
收藏 0

这个运行题的结果有点难懂,那位可以解释下?

var x = 10;

var foo = {
    x: 20,
    bar: function () {
        var x = 30;
        return this.x;
    }
};

console.log(
    foo.bar(),                  //    20.
    (foo.bar)(),               //    20.
    (foo.bar = foo.bar)(), //    10.
    (foo.bar, foo.bar)()    //    10.
);
加载中
0
lyle_luo
lyle_luo
你只要理解X的定义,有全局定义,方法定义,function定义
0
雪梨苹果
雪梨苹果

1、foo.bar(),当作对象的方法来执行,所以this指向foo;

2、(foo.bar)()匿名函数传参指向对象方法,一样当作对象的方法来执行,所以this指向foo;

3、(foo.bar = foo.bar)()匿名函数内执行赋值操作,这样就没有直接执行对象的方法,而是返回里面的函数,所以this指向window。

4、(foo.bar, foo.bar)(), 匿名函数内执行赋值操作(隐式, ex:(1,3)==3),同理第3个。

0
a
astars

引用来自“雪梨苹果”的评论

1、foo.bar(),当作对象的方法来执行,所以this指向foo;

2、(foo.bar)()匿名函数传参指向对象方法,一样当作对象的方法来执行,所以this指向foo;

3、(foo.bar = foo.bar)()匿名函数内执行赋值操作,这样就没有直接执行对象的方法,而是返回里面的函数,所以this指向window。

4、(foo.bar, foo.bar)(), 匿名函数内执行赋值操作(隐式, ex:(1,3)==3),同理第3个。

返回顶部
顶部