美文网首页
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--函数新增

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

  • 深入理解ES6--解构

    深入理解ES6--解构

  • ES6--部分新增语法

    一、let和const (1)let:定义变量 优点: 1.let不能重复定义 2.let有块级作用域 ...

  • ES6--(3)函数

    带参数默认值的函数 JS 函数的独特之处是可以接受任意数量的参数,而无视函数声明处的参数数量。 在 ES5 中模拟...

  • ES6--函数扩展

    函数新增特性 函数默认值,rest参数,扩展运算符,箭头函数,this绑定,尾调用 函数参数的默认值 rest参数...

  • ES6--箭头函数

    箭头函数 解释 箭头函数就是个简写形式的函数表达式,并且它拥有词法作用域的this值。另箭头函数总是匿名的。 用法...

  • es6--箭头函数

    概念:使用=>来定义,function(){}等于()=>{} es6的箭头函数是没有this指向,箭头函数内部t...

  • 记录些Es6的知识点

    新增字符串函数 startsWith endsWith includes repeat 新增数组函数...

  • ES6--函数的扩展

    函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 上面代码检查函数l...

  • es6--强大的函数

    1. 带参数的默认值的函数 2. 默认的表达式也可以是一个函数 3.也可以是一个不具名函数 es6写法提供一个方法...

网友评论

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

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