前言
自从ES6发布以来,就受到了广大开发者的欢迎。它的新特性解决了很多实际开发中的痛点,并且使得JavaScript逐步成为一门能够开发大型企业应用的编程语言,基于这种技术环境下,很多公司都将ES6视为开发的其中一个标准,因此在招聘人才的时候,也会对其进行ES6知识的考察。下面就来看看哪些ES6知识是我们需要重点掌握的。
箭头函数需要注意的地方
*当要求动态上下文的时候,就不能够使用箭头函数,也就是this的固定化。
1、在使用=>定义函数的时候,this的指向是定义时所在的对象,而不是使用时所在的对象;
2、不能够用作构造函数,这就是说,不能够使用new命令,否则就会抛出一个错误;
3、不能够使用arguments对象;
4、不能使用yield命令;
下面来看一道面试题,重点说明下第一个知识点:
class Animal {
constructor() {
this.type = "animal";
}
say(val) {
setTimeout(function () {
console.log(this); //window
console.log(this.type + " says " + val);
}, 1000)
}
}
var animal = new Animal();
animal.say("hi"); //undefined says hi
【拓展】
《JavaScript高级程序设计》第二版中,写到:“超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined”。也就是说在非严格模式下,setTimeout中所执行函数中的this,永远指向window!!
我们再来看看箭头函数(=>)的情况:
class Animal {
constructor() {
this.type = "animal";
}
say(val) {
setTimeout(() => {
console.log(this); //Animal
console.log(this.type + ' says ' + val);
}, 1000)
}
}
var animal = new Animal();
animal.say("hi"); //animal says hi
【特点】
不需要function关键字来创建函数
省略return关键字
继承当前上下文的 this 关键字