美文网首页
es6--函数新增

es6--函数新增

作者: 牛妈代代 | 来源:发表于2022-03-08 22:04 被阅读0次

    函数的扩展

    函数参数设置默认值
    ...rest参数
    箭头函数
    Promise函数
    Generator 函数
    async函数

    11.函数的扩展

    (1)函数参数的设置
    函数参数的默认值:
    例如 function myfun(x,y=0){},设置默认值的参数会变成必穿参数,不传会报错;
    undefined,将触发该参数等于默认值,null则没有这个效果
    函数的length属性,将返回没有指定默认值的参数个数,设置默认值后不会计入长度之内,扩展参数也不在len里面

    rest 参数:
    (形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了,就是对象的扩展运算符;
    rest 参数之后不能再有其他参数
    函数的length属性,不包括 rest 参数。
    只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错

    (2)箭头函数
    var f = v => v;
    var f = () => 5;
    var sum = (num1, num2) => num1 + num2;
    let getTempItem = id => ({ id: id, name: "Temp" });
    let fn = () => void doesNotReturn(); //没有返回值,只有一行语句

    注意:
    箭头函数没有自己的this对象。
    不可以当作构造函数,也就是说,不可以对箭头函数使用new命令,否则会抛出一个错误。
    不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
    不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

    (3)Promise函数

    loopEvent事件循环:执行栈,异步对列,执行对列;
    js程序执行代码在执行栈中,此时都是同步在执行,但在运行代码时如果遇见事件绑定、计时器会将抛到异步任务队列里面等待js引擎执行,然后继续执行在执行栈中的代码,于此同时,被抛到异步执行队列里面的计时器会执行等待的时间,如果等待时间结束,则会将此事件抛到执行队列里面。执行栈里面的代码执行完成后,程序会去检查执行队列里面是否有事件,如果有,则拿出来执行。如果没有,则会一直循环检查,直到异步事件队列和执行队列里面都没有才结束程序

    同步:任务按列队顺序执行
    异步,任务进入执行状态后及进入下一个任务
    回掉地狱:数据依赖于接口返回,多次嵌套网络请求

    定义promise函数
    1,定义函数,返回一个promise对象;例如:function getDetail(){new Promise((resolve,reject)=>{ api().then(resolve(res)) })};
    2.函数使用,getDetail().then(res=>{. //拿到值了 })

    promist:内部抛出数据请求成功失败结果,使用.then()调用解决回掉地狱;
    promise.race(fun1(),fun2()):返回回掉相对快的结果
    promise.all(fun1(),fun2()):返回所有结果为各自promise函数的回掉结果组成的数组

    Promise.then().catch()
    promise的缺点:
    (1)只有定义了promise实例,中途不能停止
    (2)除非使用回掉,不会自动抛出错误
    (3)当处于 Pending 状态时,无法得知目前进展到哪一个阶段

    (3)Generator 函数
    generator函数与普通函数区别
    1.普通函数:一旦开始执行,就会运行到最后,或是遇到return返回,不会有其他代码打断
    2.generator函数:
    定义语法:function* myfun(){ yield...}; (推荐紧挨着function关键字,可以有多个yield)
    调用:let generator=myfun()直接调用函数返回一个遍历器对象(Iterator Object);使用generator.next()方法,遍历 Generator函数内部的每一个状态

    (4)async函数
    就是将 Generator 函数的星号(*)替换成async,将yield替换成await;是Generator函数的优化提升;主要表现一下几点:
    1.内置执行器。可以直接进行,不用使用.next()调用
    2.yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)。

    语法:async function myfun(){ ...await... }
    调用:myfun()

    备注:
    async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。
    async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触 发的异步操作完成后,恢复 async 函数的执行并返回解析值。
    await 关键字仅在 async function 中有效。否则会报错,后面跟一个promise对象;

    Async函数属于异步函数,代码执行会放在异步任务队列

    相关文章

      网友评论

          本文标题:es6--函数新增

          本文链接:https://www.haomeiwen.com/subject/bypirrtx.html