generator函数的语法糖 。
Async 函数返回一个 Promise 对象,当函数执行的时候 ,遇到 await 就会先返回,等到异步处理完成之后,再接着处理函数体内await后面的语句。
eg.1
上面这个async函数大概效果就是 ,请求’categorySearch‘接口,获取返回结果,并把获取到的data值赋值给’searchResult‘。
分析为什么要这么写 ?
service应该改是个异步接口请求的方法 ,请求需要一定时间;我们必须等接口请求成功有返回值时,才能给searchResult赋值;否则searchResult赋值结果可能是空 。
eg.2
这个async函数例子和上面的例子最大的区别就是加了then()方法处理。
为什么可以使用then?
async函数返回的是一个Promise对象,所以可以使用then方法处理。而且 , async函数内部return语句的返回值,会成为then方法回电函数的参数 。
同样,async函数也可以使用catch方法处理错误。
有上面的两个简单的例子可以看出来主要有下面两个。
以上总结主要来自于 阮一峰的ES6入门教程之async一章
现:在ES6中使用剩余参数运算符则更为简洁,可读性提高:
这种函数表达式形式称为简写主体语法:1.在函数主体周围没有花括号 ,2.自动返回表达式
sundae这个构造函数内的this的值是实例对象, 因为他使用new被调用.
3.5.2. 指定的对象
函数使用call/apply被调用,this的值指向指定的obj2,因为call()第一个参数明确设置this的指向
3.5.3. 上下`文对象
函数是对象的方法, this指向就是那个对象,此处this就是指向data.
3.5.3. 全局对象或 undefined
此处是this指向全局对象,在严格模式下,指向undefined.
传递给 setTimeout() 的函数被调用时没用到 new 、call() 或 apply(),也没用到上下文对象 。意味着函数内的 this 的值是全局对象,不是 dessert 对象。实际上发生的情况是 ,创建了新的 scoops 变量(默认值为 undefined),然后递增(undefined + 1 结果为 NaN);解决此问题的方式之一是使用闭包(closure)
箭头函数的作用正是如此, 将setTimeOut()的函数改为剪头函数:
greet() 函数中混乱的前两行的作用是什么?它们的作用是当所需的参数未提供时,为函数提供默认的值。但是看起来很麻烦, ES6引入一种新的方式创建默认值, 他叫默认函数参数:
createGrid() 函数预期传入的是数组。它通过解构将数组中的第一项设为 width ,第二项设为 height 。如果数组为空,或者只有一项,那么就会使用默认参数 ,并将缺失的参数设为默认值 5。但是存在一个问题:
现:出现错误,因为 createGrid() 预期传入的是数组,然后对其进行解构。因为函数被调用时没有传入数组 ,所以出现问题 。但是,我们可以使用默认的函数参数!
现:
在 createSundae() 函数使用对象默认值进行解构时,如果你想使用 scoops 的默认值,但是更改 toppings ,那么只需使用 toppings 传入一个对象
将上述示例与使用数组默认值进行解构的同一函数相对比。
前:
对于这个函数,如果想使用 scoops 的默认数量,但是更改 toppings ,则必须以这种奇怪的方式调用你的函数:
因为数组是基于位置的,我们需要传入 undefined 以跳过第一个参数(并使用默认值)来到达第二个参数。
花括号 { } 表示被解构的对象,type、color 和 karat 表示要将对象中的属性存储到其中的变量
现:使用和所分配的变量名称相同的名称初始化对象时如果属性名称和所分配的变量名称一样 ,那么就可以从对象属性中删掉这些重复的变量名称 。
匿名函数被分配给属性 calculateWorth,但是真的需要 function 关键字吗?在 ES6 中不需要!
for...of循环是最新添加到javaScript循环系列中的循环。
它结合了其兄弟循环形式for循环和for...in循环的优势,可以循环任何可迭代(也就是遵守可迭代协议)类型的数据。默认情况下 ,包含以下数据类型:String、Array 、Map、Set,注意不包含Object数据类型(即{}) 。
默认情况下,对象是不可迭代的
for...of 循环还具有其他优势 ,解决了 for 和 for...in 循环的不足之处。你可以随时停止或退出 for...of 循环。
不用担心向对象中添加新的属性 。for...of 循环将只循环访问对象中的值。
javascript中类其实只是function, 方法之间不能使用,,不用逗号区分属性和方法.
1.关键字class带来其他基于类的语言的很多思想,但是没有向javascript中添加此功能
2.javascript类实际上还是原型继承
3.创建javascript类的新实例时必须使用new关键字