阅ES6..(简记)

2017-08-08  本文已影响33人  邢烽朔

let
const 常量
do{} 获取返回值


数组解构赋值.
let [a, b, c] = ['ha', 'haha', 'hahaha']

<数组的元素是按次序排列的,变量的取值由它的位置决定>

对象解构赋值
let {a, b} = {b: 'ha', a: 'haha'} a = 'haha' , b = 'ha'
or
let {c : b} = {a: 'haha', b: 'ha', c: 'hahaha'} b = 'hahaha'

<对象的属性没有次序,变量必须与属性同名,才能取到正确的值。>

字符串结构赋值
const [a, b, c, d, e] = 'hello'
let = {length : len} = 'hello'

数值/布尔值解构赋值
会先转为对象

函数解构赋值
function move({x, y} = { x: 0, y: 0 }) {
return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, undefined]
move({}); // [undefined, undefined]
move();

建议只要有可能,就不要在模式中放置圆括号。

解构用途:

  1. 交换变量值
  2. 从函数内返回多个值
  3. 函数参数的定义
  4. 提取JSON数据
  5. 函数参数的默认值
  6. 遍历Map结构
  7. 输入模块的指定方法

-模板字符串的限制



“尾调用优化”对递归操作意义重大,所以一些函数式编程语言将其写入了语言规格。ES6 是如此,第一次明确规定,所有 ECMAScript 的实现,都必须部署“尾调用优化”。这就是说,ES6 中只要使用尾递归,就不会发生栈溢出,相对节省内存。

[ 函数式编程有一个概念,叫做柯里化(currying),意思是将多参数的函数转换成单参数的形式。这里也可以使用柯里化。 ]

[ 总结一下,递归本质上是一种循环操作。纯粹的函数式编程语言没有循环操作命令,所有的循环都用递归实现,这就是为什么尾递归对这些语言极其重要。对于其他支持“尾调用优化”的语言(比如Lua,ES6),只需要知道循环可以用递归代替,而一旦使用递归,就最好使用尾递归。]



上一篇下一篇

猜你喜欢

热点阅读