function* fbs(){
let [prev,curr]=[0,1]
for(;;){
yield curr;//这个地方一定要加分号
[prev,curr]=[curr,prev+curr]//不然就会与这里视作同一个代码块一起执行,最后返回这句代码结果
}
}
for(let item of fbs()){
if(item>1000) break;
console.log(item)
}
为什么yield要加分号呢,yield在运用的时候是返回当前执行的语句,没有分号,就会把后面的语句视作为一同执行的代码块,从而产生返回与预期不符合的结果
function* fbs(){
let [prev,curr]=[0,1]
let [a,b]=[1,1]
for(;;){
// yield curr
// [prev,curr]=[curr,prev+curr];
// [a,b]=['我是没有加分号1','2222']
// console.log(1)
yield (()=>{
[prev,curr]=[curr,prev+curr]
console.log(curr)
return curr
})
}
}
for(let item of fbs()){
if(item>1000) break;
console.log(item())//infinity....
}
yield不建议返回一个函数 不知道什么原因会导致产生infinity这样子的一个数,建议返回一个对象
function* fbs(){
let [prev,curr]=[0,1]
let [a,b]=[1,1]
for(;;){
// yield curr
// [prev,curr]=[curr,prev+curr];
// [a,b]=['我是没有加分号1','2222']
// console.log(1)
yield (()=>{
[prev,curr]=[curr,prev+curr]
return curr
})()
}
}
for(let item of fbs()){
if(item>1000) break;
console.log(item)
}
可以采用立即执行的方式返回一个对象