登录  /  注册
博主信息
博文 33
粉丝 0
评论 0
访问量 48294
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
ES6 箭头函数和this
Lon
原创
666人浏览过

ES6 箭头函数和this

了解更多请访问https://www.bilibili.com/video/BV1QE411q7C2

一.箭头函数

1、ES6 新增了一个使用(=>)箭头符号定义函数的语法特性

  1. // 传统函数代码写法
  2. let fn = function(name){
  3. return name;
  4. }
  5. //ES6箭头函数写法
  6. let fn = name => name;
  7. console.log(fn('Mr.Lon'));

从例子我们可以看出,省略了function,花括号‘{}’用‘=>’代替了。这种写法更简洁了。

2、箭头函数也可以传递两个或以上的参数,并实现运算后返回

  1. let fn = (x , y) => x + y;
  2. console.log(fn(10,20));
  3. //翻译成函数代码为
  4. let fn = function(x,y){
  5. return x + y;
  6. }

3、如果你定义的函数,并不需要传递参数,可以用()括号方式直接返回

  1. let fn = () => 'Mr.Lon';
  2. console.log(fn());
  3. //翻译成函数代码为
  4. let fn = function(){
  5. return 'Mr.Lon';
  6. }

4、如果函数体需要更复杂的操作,可以将箭头符号右边使用传统函数体

  1. let fn = (x , y)=>{
  2. return x + y;
  3. }
  4. console.log(fn(10 , 20))

5、如果箭头符号右边是对象,返回的是对象,则需要用圆括号包含着

  1. let fn = name => ({name : name , age : 100})
  2. console.log(fn('Mr.Lon').name)
  3. //翻译成函数代码为
  4. let fn = function(name){
  5. return{
  6. name : name,
  7. age : 100
  8. }
  9. }

6、自我立即执行函数,也可以使用箭头符号来创建,具体如下:

  1. ((name) => {
  2. console.log(name);
  3. })('Mr.Lon')
  4. //翻译成函数代码为
  5. (function(name){
  6. console.log(name);
  7. })('Mr.Lon')

二.绑定 this

1、ES6 之前有一个比较头疼的问题,就是 this 指向的问题,比如下面例子

  1. let obj = {
  2. name : 'Mr.Lon',
  3. age : 100,
  4. fn : function(){
  5. setTimeout(function(){
  6. console.log(this.name + ',' + this.age)
  7. }, 500);
  8. }
  9. }
  10. obj.fn()

上面的例子比较典型,this 全局指向 window,在某个对象内部指向当前对象
当 obj 对象下包含了类似 setTimeout 函数内部,这时 this 指向就出现问题了
Web 环境下,它指向了 Window,而 node 环境下它指向 setTimeout
所以,我们通俗的做法,就是将 this 在 setTimeout 外部进行赋值保存

  1. let obj = {
  2. name : 'Mr.Lon',
  3. age : 100,
  4. fn : function(){
  5. /*
  6. 在setTimeout里面,如果我们直接写this的话,这个this是指向window的。
  7. 因此我们需要在setTimeout函数之前先保存that = this;
  8. */
  9. let that = this;
  10. setTimeout(function(){
  11. console.log(that.name + ',' + that.age)
  12. }, 500);
  13. }
  14. }
  15. obj.fn()

箭头函数的出现,彻底解决了 this 在内部指向的问题,直接指向我们所需要;
因为,箭头函数中的 this 是最外层定义的函数绑定,不受内部影响;

  1. let obj = {
  2. name : 'Mr.Lee',
  3. age : 100,
  4. fn : function(){
  5. setTimeout(() => {
  6. console.log(this.name + ',' + this.age)
  7. }, 500);
  8. }
  9. }
  10. obj.fn()

三、箭头扩展

1、箭头也支持一些内置函数的使用,比如 sort()排序;

  1. let arr = [3,1,2].sort((a,b) => a - b);
  2. console.log(arr)
  3. //翻译后的代码为:
  4. let arr = [3,1,2].sort(function(a,b){
  5. return a - b;
  6. });

2、箭头函数不支持 arguments 绑定,请直接使用…other 模式(rest 运算符);

  1. //下面这种写法不支持
  2. let fn = (x , y) =>{
  3. return arguments[0] + arguments[1]
  4. }
  5. //不确定参数,使用...
  6. let fn = (...other) => {
  7. return other[0] + other[1]
  8. }
  9. console.log(fn(10,20))
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学