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

js赋值语句执行,在有函数的情况下执行顺序究竟是怎样的?

js赋值语句执行,在有函数的情况下执行顺序究竟是怎样的?

长风秋雁 2019-03-23 18:15:12
偶然看到这篇文章运算数的求值顺序,里面举了三个例子说明“当函数有副作用的时候,运算数的求值顺序不同会导致结果不同”但是在运算符优先级表里面可以看到:函数调用(19,从左到右)>加法(13,从左到右)>赋值(3,从右到左)请问为什么存在顺序问题?不是应该先执行函数调用,再执行加法吗?文章中的例子如下:代码1var a = 5;function fun(){    a = 10;    return 20;}var b = a + fun();console.log('a:', a);console.log('b:', b);// a: 10// b: 25代码2// 交换 a 和 fun 的位置var a = 5;function fun(){    a = 10;    return 20;}var b = fun() + a;console.log('a:', a);console.log('b:', b);// a: 10// b: 30代码3// 让 fun 接收参数var a = 5;function fun(a){    a = 10;    return 20;}var b = fun(a) + a;console.log('a:', a);console.log('b:', b);// a: 5// b: 25// var b = a + fun(a); 也能得到一样的结果补充一下从加法运算符的结核性来说,是先确定左值再确定右值。但与关于结核性的解释是这样的:结合性决定了拥有相同优先级的运算符的执行顺序。所以应该是先考虑优先级,再考虑结核性吧?还是我的理解有误?不好意思,废话太多了。重复一下我的问题:请问为什么“代码1”和“代码2”存在顺序问题?不是应该先执行函数调用,再执行加法吗?
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

JS语法的顺序跟其他的不一样,并不是从上至下或者从左到右,而是从最简单的语句开始执行


查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 905 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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