switch 语句中 case 的 return 和 break 的问题

当前位置: 首页 » 记录 » javascript » switch 语句中 case 的 return 和 break 的问题

分类: javascript 524阅读阅读模式

前言:对于每个case语句写return及break是否有必要?

return 跳出函数,而 break 跳出语句;

举个例子:

  1. var a = 999;
  2. function num(n) {
  3.   switch (n) {
  4.     case 1:
  5.       return;
  6.     case 2:
  7.       return;
  8.     case 3:
  9.       break;
  10.     case 4:
  11.       return;
  12.     case 5:
  13.       break;
  14.     default:
  15.       return;
  16.   }
  17.   a++;
  18. }
  19. num(3);
  20. console.log(a); // 1000
  21. num(4);
  22. console.log(a); // 1000

函数体找到 3 匹配,跳出语句,a++ ,a 变成了 1000 ;

接着函数体找到 4 匹配,由于跳出函数体,所以不继续语句 a++,由于上一个函数体改变了 a 值「1000」 ,所以 a = 1000。

这中情况适用于具有优先级的继承方面

 

继续例子:

  1. var a = 999;
  2. function num(n) {
  3.   switch (n) {
  4.     case 1:
  5.       return;
  6.     case 2:
  7.       return;
  8.     case 3:
  9.       break;
  10.     case 4:
  11.       return;
  12.     case 5:
  13.       break;
  14.     default:
  15.       return;
  16.   }
  17.   a++;
  18. }
  19. num(4);
  20. console.log(a); // 999
  21. num(5);
  22. console.log(a); // 1000

函数体找到 4 ,由于跳出函数,不执行 a++ 所以 a 还是 a「999」;

函数体找到 5 匹配,跳出语句,a++ ,a 变成了 1000 ;

这种情况适用于继承方面。

 

同样的,如果我们每条添加 return 及 break 会怎么样?

会惊奇的发现,每次返回的结果都是 999;

例子:

  1. var a = 999;
  2. function num(n) {
  3.   switch (n) {
  4.     case 1:
  5.       return;
  6.       break;
  7.     case 2:
  8.       return;
  9.       break;
  10.     case 3:
  11.       return;
  12.       break;
  13.     case 4:
  14.       return;
  15.       break;
  16.     case 5:
  17.       return;
  18.       break;
  19.     default:
  20.       return;
  21.   }
  22.   a++;
  23. }
  24. num(1);
  25. console.log(a); // 999
  26. num(2);
  27. console.log(a); // 999
  28. num(3);
  29. console.log(a); // 999
  30. num(4);
  31. console.log(a); // 999
  32. num(5);
  33. console.log(a); // 999

因为每次直接返回函数体,语句也中断了,a++ 一直出于打酱油状态。

这种情况适用于准确数据方面。

 

说了半天,我也不知道应不应该都写 return 和 break 。鬼知道项目要求是什么啊。和规范有半毛钱关系?

 

完!

 

相关文章

评论一下

暂无评论