javascript中缺少分号结尾的情况
首先看一段代码
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种方法 ...
随机推荐
- redis应用--位图
在我们平时开发过程中,会有一些 bool 型数据需要存取,比如用户一年的签到记录,签了是 1,没签是 0,要记录 365 天.如果使用普通的 key/value,每个用户要记录 365 个,当用户上亿 ...
- 关于python那些事儿
学习总结: 1.输入一个数据 a=input. 2.在输出结果中增加字符 # 运行如下语句: print("你的名字叫{}.".format("饺子")) (以 ...
- 为什么Python是最适合初创公司的编程语言?
为什么Python是最适合初创公司的编程语言? 选自Medium 作者:Gleb Pushkov 京东云开发者社区编译 对于初创公司而言,要在众多编程语言中为公司选择一个正确.合适的语言绝非易事. 如 ...
- Eclipse个人快捷键设置及常用快捷键
Eclipse中字母自动提示的快捷键设置,具体如下图所示,加上大写字母A-Z 二.常用快捷键设置 (1)在java代码中按 ctrl+O 快速查看类的属性和方法列表如下所示 (2)在java代码中选中 ...
- background属性冲突导致的部分浏览器背景图片不显示问题
前几天在项目中遇到了一个让人摸不着头脑的bug,测试说页面显示有点问题并发了截图, 正常的显示状态是这样 首先我自信地用自己的手机检查了一下,没有问题,问清楚后得知是UC浏览器中出现的,UC的内核是u ...
- pypi镜像源加速第三方库在线安装
使用pypi镜像源加速第三方库在线安装 用easy_install和pip来安装第三方库很方便 它们的原理其实就是从Python的官方源pypi.python.org/pypi 下载到本地,然后解包安 ...
- Spring Boot 异步运用
使用@Async标签 导入包 org.springframework.scheduling.annotation.Async 并配置并发线程池asyncTaskConfig 实现AsyncConfig ...
- Vue-devtools安装步骤
今天跟着网上参考的vue调试工具安装的方法,总结出更完善的步骤: 步骤一:调往链接地址 https://github.com/vuejs/vue-devtools 步骤二:解压链接地址中的包,到本地桌 ...
- json模块
dic = {"name":"boke","age":"18"} #字典 data = json.dumps(dic) ...
- Beta冲刺第二周王者荣耀交流协会第六次会议
1.立会照片 成员:王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:任思佳 2.时间跨度: 2017年11月22日 12:00 — 12:20,总计20分钟. 3.地点: 一食 ...