关于js中的Gnerator函数的yield分号问题解疑以及一个问题的提出

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)
}

可以采用立即执行的方式返回一个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值