一.箭头函数
1、ES6 新增了一个使用(=>)箭头符号定义函数的语法特性
// 传统函数代码写法let fn = function(name){return name;}//ES6箭头函数写法let fn = name => name;console.log(fn('Mr.Lon'));
从例子我们可以看出,省略了function,花括号‘{}’用‘=>’代替了。这种写法更简洁了。
2、箭头函数也可以传递两个或以上的参数,并实现运算后返回
let fn = (x , y) => x + y;console.log(fn(10,20));//翻译成函数代码为let fn = function(x,y){return x + y;}
3、如果你定义的函数,并不需要传递参数,可以用()括号方式直接返回
let fn = () => 'Mr.Lon';console.log(fn());//翻译成函数代码为let fn = function(){return 'Mr.Lon';}
4、如果函数体需要更复杂的操作,可以将箭头符号右边使用传统函数体
let fn = (x , y)=>{return x + y;}console.log(fn(10 , 20))
5、如果箭头符号右边是对象,返回的是对象,则需要用圆括号包含着
let fn = name => ({name : name , age : 100})console.log(fn('Mr.Lon').name)//翻译成函数代码为let fn = function(name){return{name : name,age : 100}}
6、自我立即执行函数,也可以使用箭头符号来创建,具体如下:
((name) => {console.log(name);})('Mr.Lon')//翻译成函数代码为(function(name){console.log(name);})('Mr.Lon')
二.绑定 this
1、ES6 之前有一个比较头疼的问题,就是 this 指向的问题,比如下面例子
let obj = {name : 'Mr.Lon',age : 100,fn : function(){setTimeout(function(){console.log(this.name + ',' + this.age)}, 500);}}obj.fn()
上面的例子比较典型,this 全局指向 window,在某个对象内部指向当前对象
当 obj 对象下包含了类似 setTimeout 函数内部,这时 this 指向就出现问题了
Web 环境下,它指向了 Window,而 node 环境下它指向 setTimeout
所以,我们通俗的做法,就是将 this 在 setTimeout 外部进行赋值保存
let obj = {name : 'Mr.Lon',age : 100,fn : function(){/*在setTimeout里面,如果我们直接写this的话,这个this是指向window的。因此我们需要在setTimeout函数之前先保存that = this;*/let that = this;setTimeout(function(){console.log(that.name + ',' + that.age)}, 500);}}obj.fn()
箭头函数的出现,彻底解决了 this 在内部指向的问题,直接指向我们所需要;
因为,箭头函数中的 this 是最外层定义的函数绑定,不受内部影响;
let obj = {name : 'Mr.Lee',age : 100,fn : function(){setTimeout(() => {console.log(this.name + ',' + this.age)}, 500);}}obj.fn()
三、箭头扩展
1、箭头也支持一些内置函数的使用,比如 sort()排序;
let arr = [3,1,2].sort((a,b) => a - b);console.log(arr)//翻译后的代码为:let arr = [3,1,2].sort(function(a,b){return a - b;});
2、箭头函数不支持 arguments 绑定,请直接使用…other 模式(rest 运算符);
//下面这种写法不支持let fn = (x , y) =>{return arguments[0] + arguments[1]}//不确定参数,使用...let fn = (...other) => {return other[0] + other[1]}console.log(fn(10,20))
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号