开启生长之旅!这是我参与「日新方案 12 月更文应战」的第27天,点击查看活动详情
前语
谈到箭头函数,许多同学榜首反应便是该函数没有自己的this
,这也是前端面试时一道常见的考题,可是除了与this相关的部分,你对它的其它特征又了解多少呢?今日就和我们一起体系的学习一下箭头函数
箭头函数与一般函数的区别
一些比较直观的不同,这儿简单过一下,例如外形不同,都是匿名函数这些我们都比较了解,这儿就不展开讨论了,个人认为一下三点我们能理解好,对箭头函数的了解应该就算到位了
this 指向问题
榜首点应该是我们最了解的一个特征了,通常也会和 this 相关的常识点联系起来,在一般函数中,this总是指向调用它的目标,假如用作结构函数,this指向创立的目标实例
而到了箭头函数这儿就有些特别了,箭头函数自身不创立this
那这时有疑问了,它自身不创立this,拿它内部的 this 是指向哪里呢?这儿记住两句话
- 箭头函数中的 this 是在箭头函数界说时就决议的,而且不行修改(call, apply, bind)
- 箭头函数的 this 指向界说的时分,外层榜首个一般函数的 this(或者说,其声明时所在的上下文的 this)
这儿要特别关注箭头函数的this是在声明时就决议的,而不是履行时,而且确认了就不会改动,这一特性我们可以用来处理许多问题
关于 call / apply 办法无效,简单举个比如
let obj = {
a: 10,
b: function(n) {
let f = (n) => n + this.a;
return f(n);
},
c: function(n) {
let f = (n) => n + this.a;
let m = {
a: 20
};
return f.call(m,n);
}
};
console.log(obj.b(1)); // 结果:11
console.log(obj.c(1)); // 结果:11
箭头函数不能new (无法作为结构函数)
我们先了解一下结构函数的new都做了些什么?
- 创立了一个空目标(
{}
) - 为创立的空目标添加特点
__ptoto__
,并指向于结构函数的原型 - 将创立的目标作为结构函数的上下文 (改动this指向)
- 假如该函数没有返回目标,则返回
this
这儿就引出别的一个常识点了,箭头函数没有 prototype (也便是没有原型),没法让他的实例的__proto__
特点指向结构函数的prototype,所以箭头函数不能作为结构函数,否则用new调用时会报错!
let Person = (name, age) => {
this.name = name;
this.age = age;
};
// 报错
let p = new Person('dingFY', 24);
箭头函数没有没有 arguments
箭头函数没有自己的arguments
目标,在箭头函数中访问arguments
实际上获得的是外层部分(函数)履行环境中的值
let fn = (arr) => {
console.log(arguments);
}
fn([1,3,9]); //Uncaught ReferenceError: arguments is not defined
箭头函数不绑定arguments,取而代之用 …rest参数替代arguments目标
这儿许多材料提到了另一个比较生疏的词——rest参数
Rest 便是为处理传入的参数数量不一定, rest parameter(Rest 参数) 自身便是数组,数组的相关的办法都可以用
这样看可能还有点笼统,其实也不复杂,举个比如就清楚了
// rest参数...
let fn = (...arg) => {
console.log(arg);
}
fn(3,82,32,11323); // [3, 82, 32, 11323]