什么是箭头函数
引用参考MDN
function (a,b){
return a+b
}
//上面函数可以用箭头函数简写为
(a,b) => a+b
箭头函数实际就是个匿名函数,简化了函数的定义,在只有一个参数和一条返回语句时 function
return
以及{}
都可以省略.多个参数或者多条语句时括号和花括号就不可以省略了.
箭头函数的this
箭头函数是没有this
的,准确的说是它没有自己的this
,它的this
是根据上下文继承来的.
箭头函数的定义可不只是简简单单的简化代码,它更多的是被用来改变this的行为特性.
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
---------------------------------
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
上面是我们在闭包学习中抄来的一段代码.我们看第一段,普通函数调用this
会指向全局window
,所以运行this.name
的结果自然就是The window
.第二段同样是普通函数,但是函数最开始是通过对象的方法调用object.getNameFunc()()
,此时this
指向的是调用它的对象object
,然后通过缓存将this
赋给that
,所以最后运行的时候就是object
的name
了.第二段代码可以用箭头函数更加方便的写出来.
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return () => this.name
}
};
alert(object.getNameFunc()());
箭头函数中的闭包
箭头函数也是可以使用闭包的.
//一个闭包
function foo(){
var i = 0
return function(){
return i++
}
}
var a = foo()
a()
a()
a()
//通过箭头函数可以改写成
var foo = (i = 0 )=> () => i++
var a = foo()
a()
a()
a()
箭头函数中的递归
例如给定一个数字,我们用递归求它的阶层,3的话就是123
function fac(n){
if(n<=0){
return 1
}else{
return n*fac(n-1)
}
}
上面为一个普通的递归求阶乘的函数,我们可以用箭头函数改写为下
var fac = n => {
if(n<=0){
return 1
}else{
return n*fac(n-1)
}
}
我们可以合理的运用三元运算使代码更加优雅
var fac = n => (n<=0? 1 : n*fac(n-1))
不适用的
- 由于箭头函数本身没有this,所以对于call,apply方法无法修改this.
- 箭头函数不能使用new,会抛出错误.
- 箭头函数没有prototype属性.
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!