JavaScript 箭头函数与普通函数有什么区别?

一、定义的形式不同:
箭头函数带箭头,普通函数不带
二、箭头函数全都是匿名函数:
普通函数可以有匿名函数,也可以有具名函数。

let fn= ()=>{ //箭头函数定义
}
function fn1(){//普通函数定义方式
}
//或
let fn2=function(){
}

三、箭头函数中this的指向不同:

		let obj={
			classA:classA,
			classB:classB
		}
		function classA(){
			function subclassA(){
				console.log(this)
			}
			subclass();
		}
		function classB(){
			let subclassB = ()=>{
				console.log(this)
			}
			subclass();
		}
		obj.classA();//Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
		obj.classB();//{classA: ƒ, classB: ƒ}也就是obj

普通函数的this指向调用者,箭头函数的 this 永远指向其上下文的 this,如上面代码没有为subclassA指定调用者,它就默认指向了window,而subclassB则指向其上下文 。而且任何方法都改变不了箭头函数this指向,如 call() , bind() , apply()
四、箭头函数不具有prototype属性

		function Foo(){}
		let Foo2=()=>{}
		let Foo3=function(){}
		console.log(Foo.prototype)//{constructor: ƒ}
		console.log(Foo2.prototype)//undefined
		console.log(Foo3.prototype)//{constructor: ƒ}

五、箭头函数不能用于构造函数:
也就是箭头函数不能被new。为什么呢?下面我们来看一下new一个函数的过程

function Foo(){};
var f = new Foo();
这个过程等同于
function Foo(){}
var f = new Object(); // 新建一个对象
f.__proto__ = Foo.prototype;// 使该构造函数的隐式原形等于实例函数的显示原形
Foo.call(f); // 使用call方法调用函数并且指定上下文的'this

由上面一条两条
1、任何方法都改变不了其指向,如 call() , bind() , apply()所以无法使用call方法调用函数并且指定上下文的this。
2、箭头函数不具有prototype属性,新建的对象的隐式原型无法被指定为箭头函数的原型
六、箭头函数不能Generator函数:
七、箭头函数不具有arguments对象:

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值