javascript - 关于js的this问题
伊谢尔伦
伊谢尔伦 2017-04-10 15:04:32
[JavaScript讨论组]
var x = 10;
var foo = {
    x: 20,
    bar: function() {
        var x = 30;
        console.log(this.x);
    }
};

console.log(foo.bar());
console.log((foo.bar)());

这两个输出怎么解释?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
PHP中文网

foo.bar 本身是个函数的引用,指向的是

javascriptfunction() {
    var x = 30;
    console.log(this.x);
}

这个函数。这个函数中的this指向谁,关键是要看这个函数调用时的作用域在哪里。

  1. foo.bar()
    这种调用方式是在foo对象下调用,所以bar方法中的this,应该指向foo对象本身,即foo.x,所以其内部的console.log(this.x)输出的是20。
    但需要注意的时,它本身并没有定义返回值,所以返回的是undefined。因此在外部console.log(foo.bar());时第二个输出的是undefined。

  2. (foo.bar)()

不知道楼主了不了解js中(function(){})();这样的写法。它将一个函数声明变成了一个函数表达式,并能直接调用。所以foo.bar()跟(foo.bar)(),是一样的,输出也都是20和undefined。

P.S.
但如果
var a = foo.bar;
console.log(a();)
这个时候输出的应该是10和undefined。
因为这个时候调用这个函数的变量是a,作用域是全局作用域,在浏览器中,this这时即指向 window。所以内部的console.log(this.x)应该输出10。

巴扎黑

你这是问this的问题还是问JS语句的问题。

1.this问题:bar函数在foo对象里是一个方法,当一个函数作为一个方法被调用的时候,this指向调用这个方法的对象。foo.bar(),这里foo调用了这个方法,那就是指向foo了。

2.语句问题:foo.bar()(foo.bar)() 是一样的 o(╯□╰)o

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号