1. 箭头函数和普通函数的区别
- this的指向问题
箭头函数本身是没有this的,它的this是从它作用域链的上一层继承来的,并且无法通过call和apply改变this的指向
var user = {
name: 'xxxxx',
fn: function() {
var obj = {
name: 'yyy'
}
var f = () => this.name
return f.call(obj)
}
}
user.fn() // xxxxx
var name = 'window'
var obj = {
name: 'obj',
methods: () => {
console.log(this.name)
},
fn: function(cb) {
cb()
}
}
obj.fn1 = function() {
obj.fn(() => {console.log(this.name)})
}
var fn1 = obj.fn1
obj.methods()
obj.fn(() => {console.log(this.name)})
fn1()
obj.fn1()
⇒ window window window obj
- 不能作为构造函数,没有prototype属性
- 没有arguments对象
// 借助扩展运算符
var foo = (...arguments) => {
console.log(arguments)
}
foo(1,2,3)
- 不能使用yield命令,因此箭头函数不能作Generator函数
2. 函数新扩展的方法
function f(y=1) {
// 以前的写法
y = y || 1
}
function m1({x=0,y=0} = {}) {
return [x,y]
}
function m2({x,y} = {x:0, y:0}) {
return [x, y]
}
console.log(m1()) // [0,0]
console.log(m2()) // [0,0]
console.log(m1({x: 3})) //[3,0]
console.log(m2({x: 3})) //[3,undefined]
function fn(x, ...y) {
console.log(x) //1
console.lg(...y) //2 3 4
}
fn(1,2,3,4)