跳到主要内容

箭头函数与普通函数

箭头函数与普通函数的区别

1. 箭头函数不能作为构造函数, 也就是说不能使用 new 命令, 否则会抛出一个错误

var Foo = () => {}
new Foo() // TypeError: Foo is not a constructor

2. 箭头函数没有 arguments 对象, 但是可以使用 rest 参数代替

var foo = (...args) => {
console.log(args)
}
foo(1, 2, 3) // [1, 2, 3]

3. 箭头函数没有 prototype 属性

var foo = () => {}
console.log(foo.prototype) // undefined

4. 因为箭头函数没有自己的 this, 所以当然也就不能用 call()、apply()、bind() 这些方法去改变 this 的指向

var foo = () => {
console.log(this)
}
foo.call({}) // window

5. 箭头函数不能用作 Generator 函数

var foo = function* () {
yield 1
}
var bar = () => {
yield 1
}
foo().next() // {value: 1, done: false}
bar().next() // SyntaxError: Unexpected number

6. 箭头函数没有自己的 this, 会捕获其所在的上下文的 this 值, 作为自己的 this 值

var obj = {
foo: () => {
console.log(this)
},
}
obj.foo() // window