箭头函数和普通函数的常见区别

简介: 箭头函数和普通函数的常见区别

一、前言


使用JS经常会看到如下写法来定义函数:


第一种:const App= () => {} //箭头函数
第二种:function App() {}  //普通函数


他们之间除了长的不一样还有一些区别是我们需要注意的,这里给大家介绍一下。


二、箭头函数和普通函数的常见区别


1)写法不同


箭头函数比普通函数更简洁:


//普通函数
const sum = function sum(a, b) { 
   return a + b
}
//箭头函数 相当于python的匿名函数了
const sum = (a, b) => a + b


箭头函数的写法跟Python中的匿名函数类似。


2)箭头函数没有自己的this


箭头函数不能作为构造函数,也没有自己的this,它只会在自己作用域的上一层继承this。所以箭头函数中this的指向在它在定义时已经确定了,之后不会改变:

var id = '1';
var obj = {
  id: '2',
  a: function(){
    console.log(this.id);
  },
  b: () => {
    console.log(this.id);
  }
};
obj.a();    // '2'
obj.b();    // '1'
new obj.a()  // undefined
new obj.b()  // Uncaught TypeError: obj.b is not a constructor

3)普通函数有arguments方法,箭头函数没有


f1(12,23,45); 
//普通函数
const f1 = function () {
  console.log(arguments);//Arguments(3) [12, 23, 45, callee: (...), Symbol(Symbol.iterator): ƒ]
}
//箭头函数
const f1 = () => console.log(arguments);// Throws an error  - arguments is not defined
//箭头函数可以使用rest语法解决
const f1 = (...args) => console.log(args);//[12, 23, 45] 


4)箭头函数没有new.target


new.target是用来检测函数是否被当做构造函数使用,他会返回一个指向构造函数的引用:

箭头函数打印new.target出现报错


97d5afefe2224c1a9b810a334783706d.png

5)箭头函数没有变量提升


变量提升即将变量声明提升到它所在作用域的最开始的部分,如下面的代码所示:


func();
function func(){
  console.log("aa");
}


func的调用执行可以定义在函数创建之前,也不会报错,但箭头函数则不行:

3b10425247a84df89c2890a6b251c806.png


6)箭头函数不能作为构造函数使用


普通函数


 function Cls(a,b) {
    this.a=a
    this.b=b
  }
 let obj=new Cls(1,2)
 console.log(obj.a) //1


箭头函数


 let Cls = (a, b) => {
    this.a = a
    this.b = b
  }
  let obj = new Cls(1, 2)
  console.log(obj.a)//undefiend


三、总结


经过上述分析发现普通函数的功能会比箭头函数更强大一些,但这也不是说我们就要避免使用箭头函数。而是应该根据实际的应用场景来选择。对于使用react hooks来开发前端的我而言,基本很少使用普通函数,大部分的箭头函数使用也未造成开发的影响,代码反而简洁了不少。这两者也没有谁优谁劣的说法,看个人喜好来选择也是可以的。没必要在这些问题上花费过多的时间去争论,哪种让自己用起来更舒服用哪种就行。

目录
相关文章
|
7月前
|
自然语言处理 JavaScript 前端开发
说说箭头函数的特点
说说箭头函数的特点
75 0
|
7月前
箭头函数是什么
箭头函数是什么
56 0
|
3月前
|
自然语言处理
箭头函数和普通函数的区别是什么?
箭头函数和普通函数的区别是什么?
123 63
|
1月前
|
存储 JavaScript 前端开发
箭头函数和普通函数在性能方面有什么区别
【10月更文挑战第27天】箭头函数和普通函数在性能方面各有特点,箭头函数在某些场景下具有一定的性能优势,但在实际开发中,不能仅仅为了追求性能而盲目地选择箭头函数或普通函数,应该根据具体的应用场景、代码可读性和可维护性等多方面因素综合考虑来选择合适的函数定义方式。
35 2
|
2月前
|
JavaScript 前端开发
箭头函数可以使用哪些方式定义
箭头函数是ES6引入的一种新的函数定义方式,使用`=>`符号。它可以简化函数的书写,主要有两种定义方式:1. 简单表达式,如`const fn = () => {}`;2. 带参数表达式,如`const fn = (arg) => {}`。
|
2月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新语法,相比传统函数表达式更简洁,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。这使得箭头函数在处理回调和闭包时更加灵活方便。
|
7月前
|
JavaScript 前端开发 开发者
箭头函数的意义和函数的二义性
这篇文章介绍了箭头函数的特点以及与普通函数的区别。它指出了箭头函数没有this、arguments对象和prototype原型的特点,因此不能作为构造函数使用。文章还解释了函数的二义性问题,即函数可以有多种调用方式,这在JS设计上存在缺陷。最后,文章指出箭头函数不再依赖面向对象的概念,因此没有this和原型的概念。
|
6月前
箭头函数和普通函数的区别
箭头函数和普通函数的区别
24 0
|
7月前
|
自然语言处理
解释一下箭头函数的this绑定行为。
箭头函数的`this`绑定遵循词法作用域,不同于普通函数的动态绑定。它在定义时即确定,不受调用方式影响。这解决了`this`丢失问题,提供了更简洁的语法。例如,当在一个对象中,箭头函数的`this`将指向全局对象或父级作用域,而不是对象本身,与普通函数表现不同,使用时需谨慎。
41 8
面试官:箭头函数和普通函数的区别?箭头函数的this指向哪里?(二)
面试官:箭头函数和普通函数的区别?箭头函数的this指向哪里?(二)