js return 后面的括号有用么?

function f1 (n) {return (n++);}
f1(2); // 结果 2
function f2 (n) {return ++n;}
f2(2); // 结果 3
function f3 (n) {return n+=1;}
f3(2); // 结果 3
function f4 (n) {return n++;}
f4(2); // 结果 2

想问下,为什么f1()的结果是2呢? return 后的括号不能提升优先级么? 为何f3()返回结果不是2呢?

回答

其实这里我想你有一个误区,你认为f1调用后,返回的应该是 (n++) 这个值,但是不是的,而是返回了2. 要解决你这个问题其实你可以稍稍把你的f1函数修改下,改成 function f1 (n) {let r = (n++); return r;} 然后进行debug,你就会发现好玩的事情就发生了... 这里有需要掌握的知识有值传递、作用域至少这两个概念,其次是要知道无论你是否添加括号,在n++这个运算中,n都是优先赋值然后自己再执行++操作,理解清楚这一点你这个问题就随之而解了。
你的f1和f4没啥区别;
f2和f3基本一样,都是n先进行自加,然后再赋值...

THE END
分享
二维码
< <上一篇
下一篇>>