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

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

2018-02-16 4894 javascript
前言:对于每个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 。鬼知道项目要求是什么啊。和规范有半毛钱关系?   完!  

评论 (0)