明天小编发现一个es6中的新概念,同时也接触到了一个新关键字yeild,上面我就简略和大家聊聊es6中的generator函数。大家还能够关注我的微信公众号,蜗牛全栈。
一、函数申明:在function和函数名之间存在星号,并应用关键字yeild

function* foo(){    for(let i = 0;i<3;i++){        console.log(i) // 什么也没输入        yield i    }}console.log(foo()) // Generator

二、next办法

function* foo(){    for(let i = 0;i<3;i++){        yield i    }}let f = foo()// f.next() 返回yeild前面的表达式console.log(f.next()) // {value:0,done:false}console.log(f.next()) // {value:1,done:false}console.log(f.next()) // {value:2,done:false}console.log(f.next()) // {value:undefind,done:true}

三、yeild只能在generator函数外部应用,不能在里面应用

function* gen(agrs){    agrs.forEach(item => {        yield item += 1    })}gen() // 报错:

四、next函数返回值

// next 返回yeild前面表达式返回的值function* gen(x){    let y = 2 * (yield(x + 1))    let z = yield(y/3)    return x + y + z}let g = gen(5)console.log(g.next()) // {value:6,done:false}console.log(g.next()) // {value:NaN,done:false}console.log(g.next()) // {value:NaN,done:true}

五、实例敲7游戏:以后源码只是将7的倍数打印进去

function* count(x=1){    while(true){        if(x%7 === 0){            yield x        }        x++    }}// 能够一步一步执行,避免了死循环的问题let n = count()console.log(n.next().value) // 7console.log(n.next().value) // 14console.log(n.next().value) // 21console.log(n.next().value) // 28console.log(n.next().value) // 35

六、对异步的治理:(目录构造:在以后文件下存在一个static文件夹,文件夹内有三个文件a.json、b.json、c.json。每个文件内是一个对象,别离为{a:"我是a"}、{b:"我是b"}、{c:"我是c"})

function ajax(url, callback) {    // 1、创立XMLHttpRequest对象    var xmlhttp    if (window.XMLHttpRequest) {        xmlhttp = new XMLHttpRequest()    } else { // 兼容晚期浏览器        xmlhttp = new ActiveXObject('Microsoft.XMLHTTP')    }    // 2、发送申请    xmlhttp.open('GET', url, true)    xmlhttp.send()    // 3、服务端响应    xmlhttp.onreadystatechange = function () {        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {            var obj = JSON.parse(xmlhttp.responseText)            // console.log(obj)            callback(obj)        }    }}function request(url){    ajax(url,res=>{        getData.next(res)    })}function* gen(){    let res1 = yeild request("static/a.json")    console.log(res1) // {a:"我是a"}    let res2 = yeild request("static/b.json")    console.log(res2) // {b:"我是b"}    let res3 = yeild request("static/c.json")    console.log(res3) // {c:"我是c"}}let getData = gen()getData.next()