请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

闭包与this问题求解

var x = 20;
var a = {
        x : 15,
        fn : function(){
            var x = 30;
            return function(){
                return this.x;
            };
        }
};
console.log((a.fn())()); // 20
console.log(a.fn()()); //20
console.log(a.fn().call(this)); //20
console.log(a.fn().call(a)); //15

老师可以解释一下这题吗?

正在回答 回答被采纳积分+3

3回答

双越 2020-02-16 23:07:15

这个问题,你先别着急问我。你先自己主动思考一下,给你一个思路:

4 行 console.log ,你就一行一行的写自己的理解,尽量详细、傻瓜式的写。写到哪里有问题,你再停下来,针对当前的问题,问我。

按照我的思路,试一试。

----------

PS:我帮你编辑了一下题目内容的格式,用 markdown 的代码块,看起来更舒服一些。

2 回复 有任何疑惑可以回复我~
weixin_慕后端5444640 2020-06-24 14:21:55
var x = 20;
var a = {
         x : 15,
         fn : function(){
             var x = 30;
             return function(){
                return x + ' ' + this.x;
             };
         },
        fn2 : function(){
             var x = 30;
             return () => {
                return this.x;
             };
         }
};
 console.log((a.fn())()); // 30 20
 console.log(a.fn()()); //30 20
 console.log(a.fn().call(this)); //30 20
 console.log(a.fn().call(a)); //30 15
 console.log((a.fn2())()); //15
 console.log(a.fn2()()); //15
 console.log(a.fn2().call(this)); //15
 console.log(a.fn2().call(a)); //15


0 回复 有任何疑惑可以回复我~
张名扬 2020-03-13 09:04:34

我觉得是这样,

第一个(a.fn)()这种自调函数它的this指向都是window,直接调用时根据注意返回的是this.x这个属性。也就是最外层的x 20

第二个this老师说过作为对象的属性调用时指向对象,但是那是在作为对象属性直接调用的情况,这个是在对象属性中使用的闭包实际上就是fn()调用时他返回的是内层函数,fn()()相当于直接调用内层函数,所以他的指向也是window。

第三个的this我也不是很理解

第四个就很好理解了,call(a)指向a this.x就是15

0 回复 有任何疑惑可以回复我~
  • 你第三个这个this,在全局下指的就是window,所以就是20.
    回复 有任何疑惑可以回复我~ 2020-06-19 18:28:36
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号