参数默认值
function foo (enable) {
// 通常设置默认参数会通过短路运算符来设置,但如果enable传入可转为false的值时,仍会使用默认值,造成bug
let e = enable || true;
// 应用以下代码
let e1 = enable === 'undefined' ? true : enable;
}
// es6默认参数,注意:默认参数的设置必须为最后一个参数
function bar (enable = true) {}
剩余参数
function foo () {
// 参数可用arguments伪数组接收到
console.log(arguments)
}
function bar (...params) {
// params数组接收从当前位置往后的所有参数
console.log(params)
}
foo('lf', 19)
bar('pf', 29)
// 也可用在数组解构中
let [a, ...rest] = [1, 2, 3] // a 1 rest [2, 3]
箭头函数
- 简化了函数的编写,特别有利于回调函数,让代码简洁清晰
- this指向不会改变,用apply等等都不行,this指向其定义时的外层函数的this
js中this的指向,会随着执行环境的改变而改变
- 在方法中,this 表示该方法所属的对象。
- 如果单独使用,this 表示全局对象。
- 在函数中,this 表示全局对象。
- 在函数中,在严格模式下,this 是未定义的(undefined)。
- 在事件中,this 表示接收事件的元素。
- 类似 call() 和 apply() 方法可以将 this 引用到任何对象。
- 实例
//箭头函数的this
const obj = {
name : 'lf',
say : function () {
// setTimeout中的函数的执行环境为windows,因此需将外层的this保存
const self = this;
setTimeout(function () {
console.log(self.name)
}, 1000)
}
}
const obj1 = {
name : 'pf',
say : function () {
// 此处的this即为上面obj中的self,为箭头函数定义时的this
setTimeout(() => {
console.log(this.name)
}, 1000)
}
}
obj.say() // lf
obj1.say() // pf