小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
浅析箭头函数与普通函数
什么是箭头函数? 先有个简单的印象。
fnName = (args) => {
console.log(args);
}
那普通函数又是什么呢?
function fnName(args){
console.log(args);
}
两者看起来似乎非常相似啊。那么区别在哪里呢?
箭头函数更简单
从写法上可以看出 相比起普通函数, 箭头函数用了三个符号就代替了function
这个八个字母的关键字。
但如果仅仅就是这样的话,那就是多此一举了。
从this
的角度来说,箭头函数的this
指向不会因为函数而改变,这一点,懂的都懂。
不懂的,可以看完下面这段解析。
普通函数的this指向会因为运行时的执行上下文而改变,这使得曾经有非常多的文章去谈function的this的指向问题。也是在开发中的一大痛点。
而箭头函数只取决于定义时的上下文。可以简单理解为,你在敲代码时你看见的上下文就是箭头函数的上下文。
箭头函数与普通函数的对比
区别
-
箭头函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
-
箭头函数没有arguments,如果要用,可以用 rest 参数代替 (注意在node环境下是有arguments的)
-
箭头函数不能作为构造函数,不能使用new
-
箭头函数没有原型,不能继承
-
箭头函数不能当做Generator函数,不能使用yield关键字
const fn1 = (...numbers) => {
console.log(this) // window
console.log(numbers) // [123]
console.log(arguments) // error
};
const fn2 = function () {
console.log(this) // window
console.log(arguments) // [123]
}
fn1(123);
fn2(123);