首页 新闻 会员 周边

js return 后面的括号有用么?

0
悬赏园豆:20 [已解决问题] 解决于 2022-07-04 11:30
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呢?

淋风淼淼的主页 淋风淼淼 | 初学一级 | 园豆:122
提问于:2022-06-10 14:43
< >
分享
最佳答案
2

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

收获园豆:12
西越泽 | 专家六级 |园豆:10775 | 2022-06-13 16:57

是的,我在 f1()调用后,想返回 (n++),所以,我想增加 括号,提升运算优先级。但结果并不正确。

又如,f3(),我理解的 应该会 先返回 n ,再 n+=1; 结果也不对。

你说的这个,function f1 (n) {let r = (n++); return r;}我执行了下f1(2),结果也返回 2;感觉括号()没有起到提升优先级的作用。 let r = (n++); 等效于 let r = n++; 这是为什么?

我还是没有太理解,能细讲下吗?或给些知识点连接。

淋风淼淼 | 园豆:122 (初学一级) | 2022-06-23 16:56

我又遇到了一个问题,我觉得应该也是我对当前这个知识点没理解到的原因:三目运算;

https://q.cnblogs.com/q/140150/

 n==1 ? 3-1 : 9-2;

我的理解这个运算等效于 (n==1 ? 3-1 : 9)-2;

但我测试的结果,等效于 n==1 ? (3-1) : (9-2)

这个我也没有理解到。为什么?

淋风淼淼 | 园豆:122 (初学一级) | 2022-06-23 17:09

关于 debugger执行,

function f1 (n) {
  debugger; 
  let r = (n++); 
  debugger; 
  return r;
}

我执行测试时,走到这一步,

1、在Edge 中,选中了 n左边的括号;

2、在火狐中,选中了n字母;

3、在chrome中,选中了 n++字母;

然后(F11)一跳而过, r=2 n=3,就算完了。还是没看懂。

淋风淼淼 | 园豆:122 (初学一级) | 2022-06-23 17:31

@淋风淼淼: 好吧,我再来做个回答吧,希望可以解决你的疑惑,其实答案中已经说了,这里你需要了解值传递和作用域的概念。
首先看如下例子吧,希望看完你能明白,如果还不明白可以 私信 我。
<script>
function f1 (n) {
let r = (n++)
let r1 = n
console.log("n=" + n)
console.log("r="+ r)
console.log("r1="+r1)
return [r,r1]
}
console.log(f1(2))
</script>
在f3中,n+=1 这个表达式还原下,它的本来面目是 n=n+1,这个是本来面目,你理解下这个表达式,然后你就会明白为啥返回的是n+1的结果而不是n呢?

最后广告下,本人目前提供技术咨询解答服务,可以试用,简单说就是你们可以先提你们搞不明白的问题,然后合适了可以付费咨询,可以包年、包月、包天....哈哈哈,三包服务...

西越泽 | 园豆:10775 (专家六级) | 2022-06-30 11:29

@淋风淼淼: 博客园私信我吧

这里简单点说 let r = (n++); 这里无论你是否添加了括号,它其实对结果r都是没有影响的
原因你思考如下问题:
1、n++这种运算符在计算机中运算时都是先使用n然后n才会参与运算,这个你明白的对吧
2、n++ 这个结果执行后n变为了3对吧
明白了以上两点你如果还不明白那就私信我吧

西越泽 | 园豆:10775 (专家六级) | 2022-06-30 11:37
其他回答(2)
1

你这个括号加与不加,都没有影响到计算逻辑;你如果要想影响,必须得有计算,类似(n+1)*(n+2)这种,你现在只是单纯返回

收获园豆:5
三人乐乐 | 园豆:4819 (老鸟四级) | 2022-06-10 14:49

是因为没有计算,所以 括号没有起到提升运算优先级的作用吗?

支持(0) 反对(0) 淋风淼淼 | 园豆:122 (初学一级) | 2022-06-23 17:11

@淋风淼淼: 对,你在这个地方加与不加没有区别

支持(0) 反对(0) 三人乐乐 | 园豆:4819 (老鸟四级) | 2022-06-23 17:15
2

n+=1等于n=n+1;不是等于n++

收获园豆:3
桃李子 | 园豆:207 (菜鸟二级) | 2022-06-10 16:01

没有理解, n+=1 和 n++ 运算之后 不都是 n=n+1吗?

支持(0) 反对(0) 淋风淼淼 | 园豆:122 (初学一级) | 2022-06-23 17:12

@淋风淼淼: 差不多吧,但n+=1是直接得到结果,n++是当前结束再+1,大概理解就是n++的话,结果就是return 2之后n才去加1,n+=1的话是+1完再return。n++和++n也是不一样的

支持(0) 反对(0) 桃李子 | 园豆:207 (菜鸟二级) | 2022-06-23 18:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册