9021年底了,突然想在这个最后一个月准备一下,试试机会,能否更进一步。所以开始准备一些基础知识,也随带总结出来给各位想换工作的同学。希望大家能找到自己想要的工作。祝大家好运!
总结回顾
1、箭头函数没有prototype属性
let fn = () => {}; fn.prototype === undefined; //true
2、箭头函数的this指向定义时外层第一个普通函数的this
let fn, barObj = { message: 111 }, fooObj = { message: 222 }; function bar() { // 运行时实例 fn(); } function foo() { // 定义时实例 fn = () => { console.log('输出:', this); // 输出: {message: 222} } } // 这里有一个问题就是,foo.call一定要在bar.call之前,大家想想为什么了? foo.call(fooObj); bar.call(barObj);
3、不能直接修改箭头函数的this
let fn, barObj = { message: 111 }, fooObj = { message: 222 }; function bar() { // 运行时实例 fn.call({message: 333}); baz.call({message: 333}) } function foo() { // 定义时实例 fn = () => { console.log('输出:', this); // 输出: {message: 222} } } function baz() { console.log('输出:', this); // 输出: {message: 333} } foo.call(fooObj); bar.call(barObj); // 这里如何能修改箭头函数this的指向了,我们可以间接操作。 // 修改箭头函数的this指向定义时外层第一个普通函数的this,来达到我们的目的
4、当箭头函数外层没有普通函数时,它的this在严格和非严格模式都是指向window。
5、箭头函数没有外层函数直接使用arguments会报错
let foo = () => { console.log('输出:', arguments); } foo() 复制代码
6、箭头函数有外层函数时,arguments继承自外层函数的arguments
function foo() { console.log(arguments); function boo () { console.log(arguments); function coo () { console.log(arguments); let aoo = () => { console.log(arguments); } aoo('外层4'); } coo('最外层3'); } boo('外层2'); } foo('外层1');
7、使用new调用箭头函数会报错
let aoo = () => { console.log(arguments); } let boo = new aoo();
8、箭头函数没有外层函数时,new.target会报错
let a = () => { console.log(new.target); }; a();
9、箭头函数不支持重名参数
function foo(a, a) { console.log(a, arguments); } var boo = (a, a) => { console.log(a); }; foo(1, 2); boo(1, 2);
10、箭头函数语法更具优雅
- 箭头函数不用写function
- 箭头函数只有一个参数时,可以省略括号
- 箭头函数可以省略{}和return