ES6箭头函数

1.箭头函数的写法

如果函数内有返回值

var fn = v => v + 1

返回值如果不是表达式(是对象),用()括号返回

var fn = v => ({ obj: v })

返回值如果不是表达式(也不是对象)方法体内按正常写

var fu = () => {var a = 1;var b = a+1;return b;
}

2.箭头函数和普通函数的区别

this指向不同:

箭头函数的this指向继承自其上一层作用域的this,无法通过call和apply改变this指向。

箭头函数的this指向由函数定义位置所决定而不是函数调用位置决定

不能作为构造函数(不能new) ,也没有prototype属性

1. this指向的问题

箭头函数本身是没有this的,他的this是从他作用域链的上一层继承来的,并且无法通过call和apply改变this指向

箭头函数的this,是看箭头函数定义位置所在的作用域,而不是函数调用的位置(也可以说继承上一级作用域的this)

2. 不能作为构造函数(不能new) 没有prototype属性

3. 没有arguments对象(函数传入的实参的集合),可以利用rest参数:...arguments

4. 不能使用yield命令,因此箭头函数不能用作 Generator 函数

function* fn(){yeild 1;yeild 2;return 3;
}
var f = fn();
f.next();// Generator 函数调用

5.函数新扩展的方法——给函数的参数指定默认值;与解构赋值默认值配合使用;通过rest参数获取函数的多余参数

箭头函数使用默认值

普通函数: 使用短路运算来给默认值

1.箭头函数使用默认值

function fn (x, y) {y = y || 1console.log('合计:'x + y)
}
//箭头函数
function fn (x, y = 1) {console.log('合计:'x + y)
}

2.与解构赋值默认值配合使用

// 与解构赋值默认值配合使用
function fn1 ({x, y = 1}) {console.log('合计:'x + y)
}
fn1({x: 1})

3.通过rest参数获取函数的多余参数 (rest参数只能放在末尾,不能再首位或中间)

function fn (x, ...y) {console.log(x)console.log(y)
}
fn(1, 2, 3, 4)
function m1({x = 0, y = 0} = {}) {return [x, y];
}
function m2({x, y} = { x: 0, y: 0 }) {return [x, y];
}
console.log(m1())
console.log(m2())
console.log(m1({x: 3}))
console.log(m2({x: 3})) // 3, undefined

 

6.箭头函数的实际运用

vue项目中的实际运用:点击按钮时,打开msgbox的窗口。在普通函数和this函数下不同写法

7.箭头函数相关面试题

面试题1

var name = 'window'
var obj = {name: 'obj',methods: () => {console.log(this.name)},fn: function (cb) {cb()}
}
obj.fn1 = function () {obj.fn(() => { console.log(this.name) })
}
var fn1 = obj.fn1
obj.methods() //箭头函数this取决于定义位置的作用域的this,定义在obj对象(而对象没有作用域),所以只能是window,所以打印window
obj.fn(() => { console.log(this.name) })//箭头函数作为参数传入,定义在函数调用位置,还是在全局作用域,所以还是window
fn1() // 定义在obj.fn()中定义的,而obj.fn()是指向window
obj.fn1() //obj

面试题2

var fn = function () {return () => { console.log(this.name) }
}
var obj1 = {name: '张三'
}
var obj2 = {name: '李四'
}
var name = '王五'
obj1.fn = fn
obj2.fn = fn
obj1.fn()() //obj1.fn()先执行,再将执行结果作为方法名进行执行
obj2.fn()()
fn()()

面试题3

var user = {name: '张三',fn: function () {var obj = {name: '李四'}var f = () => this.name// 箭头函数this取决于定义位置所在的位置,即和fn的this指向保持一直return f.call(obj)}
}var res = user.fn(); //张三

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/108359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微信小程序】数字化会议OA系统之首页搭建(附源码)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯&#x1f3a…

【SA8295P 源码分析 (一)】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码)

【SA8295P 源码分析】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码) 一、APPS PBL(Application Primary Boot Loader):固化在CPU ROM中1.1 APPS PBL 加载 XBL Loader1.2 XBL Loader加载验证并运行SMSS进行自检,自检完成后触发Warm Reset1.3 WarmRest后,APPS…

Java8 新特性之Stream(六)-- Stream的顺序流(Stream)与并行流(parallelStream)的图解

目录 1. 顺序流(Stream)与并行流(parallelStream)的区别: 2. 顺序流(Stream)与并行流(parallelStream)的图解:

警惕这款记录音频和电话的Android木马软件SpyNote

导语:近日,一款名为SpyNote的Android木马软件被揭示出其多样化的信息收集功能。该木马软件通常通过短信钓鱼攻击传播,攻击链通过欺骗潜在受害者点击嵌入链接来安装该应用程序。除了要求入侵性权限以访问通话记录、摄像头、短信和外部存储等&a…

element ui this.$msgbox 自定义组件

this.$msgbox({title: "选择", message: (<com1figs{this.figs} on-selected{this.new_selected}></com1>),showCancelButton: false,showConfirmButton: false,}); 运行报错 Syntax Error: Unexpected token (89:20) 参考&#xff1a; https://gith…

二叉树模板

根据先序遍历建树 const int N2e610; struct node {char date;int l,r; }str[N]; string s; //读入先序遍历 int cnt,idx; int build() {if (s[cnt]#){cnt;return 0;}str[idx].dates[cnt];int nowidx;str[now].lbuild();str[now].rbuild();return now; }int ubuild();//返回根节…

python+django高校体育乒乓球场地预约管理系统_s2409

本系统提供给管理员对首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;乒乓球场管理,场地类型管理,场地预约管理,暂离申请管理,离开申请管理,管理员管理,留言反馈,系统管理等诸多功能进行管理。本系统对于用户输入的任何信息都进行了一定的验证&#xff0c;为管理员操…

C++项目实战——基于多设计模式下的同步异步日志系统-⑫-日志宏全局接口设计(代理模式)

文章目录 专栏导读日志宏&全局接口设计全局接口测试项目目录结构整理示例代码拓展示例代码 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&#xff0c;阿里云专家博主&#xff0c;C…

【前端学习】—bind、call、apply(四)

【前端学习】—bind、call、apply(四) 一、代码题 <script>var name="freeman";function sayAuthor(){var name=

PCLVisualizer显示点云的深层用法

以下代码均是在QT中使用QVTKOpenGLNativeWidget的简单教程以及案例-CSDN博客文章的基础上&#xff0c;修改按钮对应的槽函数中的程序。 1.显示文件中点云颜色属性信息&#xff0c;利用PointCloudColorHandlerRGBField得到每个点云对应的颜色。 pcl::PointCloud<pcl::PointX…

Vuex中多个参数显示undefined的解决方案

笔者今天在使用Vuex中的mutations改变state里面的全局状态的值&#xff0c;获取到的数据却怎么都是第一个参数是可以获取到,但是第二个就获取不到&#xff0c;就显示undefined 问题代码 mutations: {multiparameter(state,id,newStatus) {console.log("数据的Key&#x…

【前端】Js

目 录 一.前置知识第一个程序JavaScript 的书写形式注释输入输出 二.语法概览变量的使用理解 动态类型基本数据类型 三.运算符算术运算符赋值运算符 & 复合赋值运算符自增自减运算符比较运算符逻辑运算符位运算移位运算 四.条件语句if 语句三元表达式switch 五.循环语句whi…

LeetCode75——Day6

文章目录 一、题目二、题解 一、题目 151. Reverse Words in a String Given an input string s, reverse the order of the words. A word is defined as a sequence of non-space characters. The words in s will be separated by at least one space. Return a string …

ORA-12541:TNS:no listener 无监听程序

问题截图 解决方法 1、删除Listener 新建一个新的 2、主机为服务器ip 3、设置数据库环境 只需要设置实例名不需要设置路径 4、服务命名 一样设置为ip 服务名与监听名一直 eg&#xff1a;orcl

Variations-of-SFANet-for-Crowd-Counting记录

论文&#xff1a;Encoder-Decoder Based Convolutional Neural Networks with Multi-Scale-Aware Modules for Crowd Counting 论文链接&#xff1a;https://arxiv.org/abs/2003.05586 源码链接&#xff1a;GitHub - Pongpisit-Thanasutives/Variations-of-SFANet-for-Crowd-C…

docker镜像仓库迁移

Docker镜像迁移我们使用的工具是syncer&#xff0c;项目地址&#xff1a;https://github.com/MR5356/syncer &#xff0c; 并且这个工具支持多对多的镜像仓库迁移 安装syncer 通过下载对应系统的二进制文件进行安装&#xff1a;点击下载 也可以通过源码进行安装&#xff0c;…

云原生场景下高可用架构的最佳实践

作者&#xff1a;刘佳旭&#xff08;花名&#xff1a;佳旭&#xff09;&#xff0c;阿里云容器服务技术专家 引言 随着云原生技术的快速发展以及在企业 IT 领域的深入应用&#xff0c;云原生场景下的高可用架构&#xff0c;对于企业服务的可用性、稳定性、安全性越发重要。通…

GFS分布式文件系统实验

GFS概念 Gluster 是一个开源的分布式文件系统 它是一个C/S架构 由存储服务器、客户端以及NFS/Samba存储网关组成 没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能&#xff0c;可靠性和稳定性 文件系统定义 负责实现数据存储方式&#xff0c;以什么格式保存在…

Spring5应用之高级注解开发

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言Conf…

js,jquery,vue设置html标签隐藏不显示

前端 <p id"myElement"> </p>使用js将idmyElemnt的标签隐藏 使用 style.display 属性&#xff1a; 通过设置 style.display 属性为 "none"&#xff0c;可以隐藏标签。 var element document.getElementById("myElement");element…