javascript中缺少分号结尾的情况

首先看一段代码

 1 function* fib (max) {
 2     let a = 0
 3     let b = 1
 4     let n = 1
 5     while (n < max) {
 6         yield a;
 7         [a, b] = [b, a + b]
 8     }
 9 }
10 
11 let [first, second, third, fourth, fifth] = fib(5)

实现裴波那切数列,输出结果,正常

[first, second, third, fourth, fifth] // 0, 1, 1, 2, 3

注意看第6行,加入将第6行后的分号去掉,输入结果如下

[1,1, 1,1, 1,1, 1,1, 1,1]

每一项都是 [1, 1],因为第6行在省去分号之后,被解析为

yield a[a, b] = [b, a + b]

那么问题来了,对于分号的解析规则是怎样的呢?

  • 规则一:仅在“}”后、一行结束时以及一段程序结束处自动添加分号
  • 规则二:仅在下一行第一个字符无法解析时自动添加分号,注意:若第二行以(、[、+、-或/开头时,JavaScript不会自动添加分号
    • 1 a = b
      2 (fn())
      3 
      4 // 会被解析为
      5 a = b(fn())
  • 规则三:for循环及空循环体的while不能省略分号
    •  1 // for 正常写法
       2 for (var i = 0; i < 10; i++) {
       3   console.log(i)  
       4 }
       5 
       6 // for 中分号不能省略,会报错
       7 for (var i = 0
       8  i < 10
       9  i++      
      10 ) {
      11   console.log(i)  
      12 }
    • 1 // while 出现空循环体时, 正常写法
      2 
      3 while(flag);
      4 
      5 // 省略分号,解析报错
      6 while(flag)

根据以上规则描述,开始的示例中,应该归属于规则二,所以分号省略与否对结果还是有比较大的影响

但是,在使用过程中分号的省略与否和个人编码风格关系更大一些,知道原理更加重要,在关键位置注意分号的使用即可。

 

转载于:https://www.cnblogs.com/jacky-jyk/p/10607831.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值