js的分号把我坑了,该长记性了
前言:对于前端到底要不要写分号,各有各的说法,我反正是没有这个习惯。然后,等被坑了之后,我有些话想说。
事情是这样的,在群里看到有人发了一段代码:
function * fibs(){
let a = 0;
let b = 1;
while(true){
yield a;
[a, b] = [b, a + b];
}
}
[first, second, third, fourth, fifth, sixth] = fibs()
sixth // 5
复制代码
他的问题是这段代码怎么解读,不会死吗?当然,我看到这段代码是好奇最后的数组解构赋值的结果。如果这段代码正常工作,那么就验证了我的猜想。试着动动手的心态去试了下:
function * fibs(){
let a = 0, b = 1;
while(true){
yield a;
[a, b] = [b, a + b]
}
}
[first, second, third, fourth, fifth, sixth] = fibs()
sixth//[1, 1]
复制代码
咦,这什么鬼,为什么不一样?
然后,苦苦寻觅,越是尝试越是崩溃,不行,我得按照原图中的写一遍:
function * fibs(){
let a = 0;
let b = 1;
while(true){
yield a;
[a, b] = [b, a + b];
}
}
[first, second, third, fourth, fifth, sixth] = fibs()
sixth // 5
复制代码
【js的分号把我坑了,该长记性了】我想你也知道了,就是因为这个分号导致的结果不同。
解决了这个问题之后,我再考虑之前的问题,es6的数组解构赋值是不是直接调用next方法了?查了下资料,发现的确是这样啊,查阅 exporting es6 -- Destructuring, 第一行就是。
额,这个有点坑,我不确定是不是只有yield是这样,只要不加分号,他就认为你这个表达式还没有结束,反正是挺坑的啊,希望自己能把添加分号作为一个习惯。
第一次发帖,各位大佬轻喷哈。
转载于:https://juejin.im/post/5c2d8fbe5188256b7c4a103d
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量