箭头函数的this指向上级作用域
var name = 'lcj'
const person = {
name: 'hesehuoyan',
say: () => console.log(this.name),
sayHello: function () {
console.log(this.name)
},
sayHi: function () {
setTimeout(function () {
console.log(this.name)
}, 500)
},
asyncSay: function () {
setTimeout(()=>console.log(this.name), 500)
}
}
person.say() //lcj
person.sayHello() //hesehuoyan
person.sayHi() //lcj
person.asyncSay() //hesehuoyan
箭头函数有以下几点需要注意的:
- 箭头函数没有自己的this对象。
箭头函数没有constructor,不可以当作构造函数,也就是说,不可以对箭头函数使用new命令,否则会抛出一个错误。
let a = () => {};
let b = new a(); // a is not a constructor
不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
- 第一种情况,箭头函数不存在arguments对象
- 第二种情况,若箭头函数被外层函数包裹,则拿到的arguments 对象是外层函数的 ```javascript // 第一种情况 let foo = () => { console.log(arguments); }; foo(1, 2, 3, 4); // Uncaught ReferenceError: arguments is not defined
// 第二种情况 function foo() { setTimeout(() => { console.log(‘args:’, arguments); }, 100); }
foo(2, 4, 6, 8) // args: [2, 4, 6, 8]
let foo = (first, …rest) => { console.log(first, rest) // 1 [2, 3, 4] }; foo(1, 2, 3, 4) // 1 [2, 3, 4]
```
- 不可以使用yield命令,因此箭头函数不能用作 Generator 函数。