🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
ES6函数扩展 - 可以直接为函数的参数指定默认值,参数变量是默认声明的,所以不能用let或const再次声明,参数默认值不是传值的,而是每次都重新计算**默认值表达式**的值。也就是说,参数默认值是惰性求值的。 - 参数默认值可以与解构赋值的默认值,结合起来使用 - 通常情况下,定义了默认值的参数,应该是函数的尾参数。因为这样比较容易看出来,到底省略了哪些参数。如果非尾部的参数设置默认值,实际上这个参数是没法省略的。 - 指定了默认值以后,函数的argument.length属性,将返回没有指定默认值的参数个数。也就是说,指定了默认值后,argument.length属性将失真 - 可以将参数默认值设为undefined,表明这个参数是可以省略的 - ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了;rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错;函数的length属性,不包括 rest 参数。 ~~~ function push(array, ...items) { items.forEach(function(item) { array.push(item); console.log(item); }); } var a = []; push(a, 1, 2, 3) ~~~ - 函数的name属性,返回该函数的函数名,这个属性早就被浏览器广泛支持,但是直到 ES6,才将其写入了标准。 - 如果箭头函数不需要参数或需要多个参数,就使用一个**圆括号代表参数**部分 - 如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回 - 箭头函数可以与变量解构结合使用。 - 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象,正是因为它没有this,所以也就不能用作构造函数。 - 由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。 - **尾调用优化**(Tail call optimization),即只保留内层函数的调用帧;如果所有函数都是尾调用,那么完全可以做到每次执行时,调用帧只有一项,这将大大节省内存;这就是“尾调用优化”的意义。 - ES6 第一次明确规定,所有 ECMAScript 的实现,都必须部署“**尾调用优化**”;这就是说,ES6 中只要使用尾递归,就不会发生栈溢出,相对节省内存。