首先看一段代码
function* fib (max) {
let a = 0
let b = 1
let n = 1
while (n < max) {
yield a;
[a, b] = [b, a + b]
}
} 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不会自动添加分号
a = b
(fn()) // 会被解析为
a = b(fn())
- 规则三:for循环及空循环体的while不能省略分号
// for 正常写法
for (var i = 0; i < 10; i++) {
console.log(i)
} // for 中分号不能省略,会报错
for (var i = 0
i < 10
i++
) {
console.log(i)
}// while 出现空循环体时, 正常写法 while(flag); // 省略分号,解析报错
while(flag)
根据以上规则描述,开始的示例中,应该归属于规则二,所以分号省略与否对结果还是有比较大的影响
但是,在使用过程中分号的省略与否和个人编码风格关系更大一些,知道原理更加重要,在关键位置注意分号的使用即可。
javascript中缺少分号结尾的情况的更多相关文章
-
JavaScript中的分号插入机制
原文:JavaScript中的分号插入机制 仅在}之前.一个或多个换行之后和程序输入的结尾被插入 也就是说你只能在一行.一个代码块和一段程序结束的地方省略分号. 也就是说你可以写如下代码 functi ...
-
javascript中的分号【;】
以前一直以为,在编写js代码的时候,如果在代码后面不添加分号,JavaScript会自动填补分号.最近看了权威指南,才突然发现一直理解有误,而且关于分号的使用,还有很多需要注意的地方. 1.分号的省略 ...
-
从零开始学习前端JAVASCRIPT — JavaScript中this指向的四种情况
JavaScript中this的四种情况(非严格模式) 1.当this所在函数是事件处理函数时,this指向事件源.2.当this所在函数是构造函数时,this指向new出来的对象.3.this所在函 ...
-
JavaScript中:表达式和语句的区别
JavaScript中:表达式和语句的区别 Javascript语言精粹:表达式是由运算符构成,并运算产生结果的语法结构.程序是由语句构成,语句则是由“:(分号)”分隔的句子或命令.如果在表达式后面加 ...
-
JavaScript 中表达式和语句的区别
1.语句和表达式 JavaScript中的表达式和语句是有区别的.一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数.下面的每行代码都是一个表达式: myvar3 + ...
-
JavaScript中的各种奇葩问题
原文:JavaScript中的各种奇葩问题 JavaScript浮点数 var a = (0.1 + 0.2) + 0.3; var b = 0.1 + (0.2 + 0.3); console.lo ...
-
JavaScript中的正则表达式(终结篇)
JavaScript中的正则表达式(终结篇) 在之前的几篇文章中,我们了解了正则表达式的基本语法,但那些语法不是针对于某一个特定语言的.这篇博文我们将通过下面几个部分来了解正则表达式在JavaScri ...
-
javascript中正则表达式的基础语法
× 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...
-
javascript中数组的22种方法
× 目录 [1]对象继承 [2]数组转换 [3]栈和队列[4]数组排序[5]数组拼接[6]创建数组[7]数组删改[8]数组位置[9]数组归并[10]数组迭代[11]总结 前面的话 数组总共有22种方法 ...
随机推荐
-
windows server2008 r2 下启用 sqlserver 2008的远程连接
首先说明,本文转自互联网. TMD 花了二天,终于找到怎么开启这个远程连接了.....娘的,累死了,写下来,希望能帮助同胞们... 用win server 2008 r2 和sql server 20 ...
-
ACM 喷水装置(二)
喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...
-
Oracle数据库管理员面试题
Oracle数据库管理员面试题 1.模拟使用oracle的flashback找回过去某个时间点的数据,实现误操作的恢复. http://www.txw100.com/soft/2013/08/547. ...
-
追加文件内容java
1.向空文件文件中追加内容(如果原来有内容,则覆盖) FileWriter writer; try { writer = new FileWriter(listFile);//创建字符输出流类对象和已 ...
-
Columbus’s bargain
Columbus’s bargain Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
-
UIWebView 加载网页、文件、 html-b
UIWebView 是用来加载加载网页数据的一个框.UIWebView可以用来加载pdf word doc 等等文件 生成webview 有两种方法,1.通过storyboard 拖拽 2.通过al ...
-
算法专题训练 搜索a-T3 Ni骑士(ni)
搞了半天八数码弄不出来就只好来打题解 这道题是在搜索a碰到的(链接: http://pan.baidu.com/s/1jG9rQsQ ) 感觉题目最大亮点就是这英文简写"ni", ...
-
python-day2 字典
===========字典功能=============> dict.clear() -->清空字典 dict.keys() -->获取所有key dict.values() --& ...
-
Java-ServletContextListener
/** * Implementations of this interface receive notifications about * changes to the servlet context ...
-
C#学习笔记 day_three
C#学习笔记 day three Chapter 3 类型 3.3引用类型 引用类型的变量也成为对象,有六种类型:(1)对象类型 (2)字符串类型 (3)类类型 (4)数组类型 (5)接口类型 (6) ...