校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > js语言和框架 > 语法相关-操作符相关
题目

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

解答

1、语法更加简洁、清晰
从上面的基本语法示例中可以看出,箭头函数的定义要比普通函数定义简洁、清晰得多,很快捷。


2、箭头函数不会创建自己的this(重要!!深入理解!!)
我们先来看看MDN上对箭头函数this的解释。

    箭头函数不会创建自己的this,所以它没有自己的this,它只会从自己的作用域链的上一层继承this。

箭头函数没有自己的this,它会捕获自己在定义时(注意,是定义时,不是调用时)所处的外层执行环境的this,并继承这个this值。

所以,箭头函数中this的指向在它被定义的时候就已经确定了,之后永远不会改变。

来看个例子:

var id = 'Global';
function fun1() {
// setTimeout中使用普通函数
setTimeout(function(){
console.log(this.id);
}, 2000);
} function fun2() {
// setTimeout中使用箭头函数
setTimeout(() => {
console.log(this.id);
}, 2000)
}

fun1.call({id: 'Obj'}); // 'Global'
fun2.call({id: 'Obj'}); // 'Obj'

上面这个例子,函数fun1中的setTimeout中使用普通函数,2秒后函数执行时,
这时函数其实是在全局作用域执行的,所以this指向Window对象,this.id就指向全局变量id,所以输出'Global'。

但是函数fun2中的setTimeout中使用的是箭头函数,这个箭头函数的this在定义时就确定了,
它继承了它外层fun2的执行环境中的this,而fun2调用时this被call方法改变到了对象{id: 'Obj'}中,所以输出'Obj'。


C 4条回复 评论
xzj

箭头函数没有自己的this 箭头函数没有内置对象arguments

发表于 2022-09-16 18:14:57
0 0
٩(๑^o^๑)۶

1,.this指向:箭头函数没有自己的this,不能调用call和apply.它只能继承作用域上一级的this.

2.没有函数提升

3.没有arguments对象

4.不能new实例化:没有prototype,但new关键字内部需要把新对象的__proto__指向原函数的prototype.

发表于 2022-07-16 11:20:46
0 0
天宫

1. 箭头函数相当于匿名函数,不能用new实例化对象
2. 箭头函数的this只能根据上级,绑定this。没办法改变成其他指向。

发表于 2020-10-20 10:30:30
0 0
v2113

this指向不同,箭头函数this没有指向

发表于 2020-10-20 10:03:11
0 0