其他同学问题中的疑问

其他同学问题中的疑问

https://class.imooc.com/course/qadetail/144266

这个问题里老师也没有回答,其他同学回答的链接里也没有解释原因。

http://img1.sycdn.imooc.com//climg/5ede1b4c0977c56f07060402.jpg

那位同学发的链接中说逗号运算是返回右边的结果,等号运算和逗号运算一样,那这四个情况不应该都是执行的console.log(inner.func());吗?怎么它们的结果不一样呢?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,问题解答如下:

1、逗号运算符返回后一段表达式结果,这里inner.func没有调用,所以返回的是整个函数体

http://img1.sycdn.imooc.com//climg/5edefcc0092bdc8d04900045.jpg

http://img1.sycdn.imooc.com//climg/5edefcbb095da39e04640125.jpg

加上括号也就是这样调用的:

(function() {var out = 30;return this.out;})();

匿名函数自执行,也就是window对象调用的,所以返回this.out值为25。

2、等号运算也是一样的,这样输出的是运算过后的返回值

http://img1.sycdn.imooc.com//climg/5edefef3099c795904740030.jpg

和上面一样同样是函数体

http://img1.sycdn.imooc.com//climg/5edeff0309dca7f304730098.jpg

然后匿名函数自执行,this指向window,输出this.out值为25 。这两个相当于返回值执行,运算过后的返回值再计算,记住这种方式就好。

3、inner.func()是inner对象调用的,所以值为20 

4、(inner.func)()括号里面没有运算符 ,自己调用自己,js执行时直接引用它的指向 , 相当于inner.func(),所以值为20 。

祝学习愉快!

  • Aurora_Meteor 提问者 #1
    ‘=’运算有点迷糊,这是直接把右边的内容返回了么,和左边的是什么内容没什么关系是吗?我看着左边的,总想着是把inner对象的func属性重新赋值成右边的函数体,然后执行inner对象的func属性,就像最后的两个【inner.func()】【(inner.func)()】一样....
    2020-06-09 11:51:22
好帮手慕星星 2020-06-09 13:50:12

同学你好,等号赋值运算返回值是等号右侧内容,例如

http://img1.sycdn.imooc.com//climg/5edf22c109e2b2fb01160054.jpg

http://img1.sycdn.imooc.com//climg/5edf22da093f0e4002140115.jpg

这里也是一样的,返回值是右侧的inner.func值

http://img1.sycdn.imooc.com//climg/5edf22f509cb356504750029.jpg

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师