JavaScript中的函数申明、函数表达式、箭头函数


Posted in Javascript onDecember 06, 2019

JavaScript中的函数可以通过几种方式创建,如下。

// 函数声明
function getName() {
return 'Michael'
}
// 函数表达式
const getName = function() {

return 'Michael'
}
// 箭头函数(同样也是表达式)
const getName = () => {

return 'Michael'
}

函数声明和表达式之间的差别是

JavaScript 解释器中存在一种变量声明被提升的机制,也就是说函数声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面。而用函数表达式创建的函数是在运行时进行赋值,且要等到表达式赋值完成后才能调用

看一个例子

getName()//oaoafly
var getName = function() {
console.log('wscat')
}
getName()//wscat
function getName() {

console.log('oaoafly')
}
getName()//wscat

上面的问题可以分解成两个简单的问题,有助于你更清楚的看出函数声明和表达式之间的区别

var getName;
console.log(getName)//undefined
getName()//Uncaught TypeError: getName is not a function
var getName = function() {
console.log('wscat')
}

var getName;
console.log(getName)//function getName() {console.log('oaoafly')}
getName()//oaoafly
function getName() {

console.log('oaoafly')
}

这个区别看似微不足道,但在某些情况下确实是一个难以察觉并且“致命“的陷阱。出现这个陷阱的本质原因体现在这两种类型在函数提升和运行时机(解析时/运行时)上的差异。

箭头函数

箭头函数是语法和函数表达式比起来稍有不同的函数表达式。在上面的示例中,你可以看到箭头函数看起来像函数表达式,但没有单词function,然后在括号和大括号之间带有粗箭头=>。

你可能听说过,在JavaScript中,函数会创建自己的作用域。这意味着JavaScript函数会创建自己的上下文this,如果我们需要一个函数但是这个函数却没有自己的上下this,那么就可能会遇到问题。箭头函数的特征之一是它们不创建上下文,因此箭头函数的内部this与外部的this相同。

箭头函数也可以很小巧。查看下面两个完全相同的示例:

const getName = () => {
return 'Michael'
}
// 和上面的相同,但是更小巧
const getName = () => 'Michael'

当箭头函数忽略其大括号时,表示我们希望粗箭头右侧的内容为返回值(不用加return)。这称为隐式返回值。关于箭头函数,还有一些更细微的细节需要了解,例如如何返回对象以及如何省略单个参数的括号。

// 箭头函数直接返回对象
const getStudent = () => ({ name: 'Michael', age: 18, });
 
// 省略单个参数的括号
const addOne = (n) => n+1;
const addOne = n => n+1;

总结

以上所述是小编给大家介绍的JavaScript中的函数申明、函数表达式、箭头函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript 跳转代码集合
Dec 03 Javascript
鼠标经过显示二级菜单js特效
Aug 13 Javascript
JS实现闪动的title消息提醒效果
Jun 20 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
浅析javascript操作 cookie对象
Dec 26 Javascript
jQuery构造函数init参数分析续
May 13 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
May 20 Javascript
基于JavaScript实现树形下拉框
Aug 10 Javascript
JS控件bootstrap datepicker使用方法详解
Mar 25 Javascript
angular中不同的组件间传值与通信的方法
Nov 04 Javascript
脚手架vue-cli工程webpack的基本用法详解
Sep 29 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
Dec 14 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
Dec 06 #Javascript
微信小程序实现滚动加载更多的代码
Dec 06 #Javascript
微信小程序实现滑动翻页效果(完整代码)
Dec 06 #Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
Dec 06 #Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
Dec 06 #Javascript
微信小程序激励式视频广告组件使用详解
Dec 06 #Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
Dec 06 #Javascript
You might like
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
$("").click与onclick的区别示例介绍
2014/09/25 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
Series和DataFrame使用简单入门
2019/11/13 Python
Django如何使用redis作为缓存
2020/05/21 Python
python os.listdir()乱码解决方案
2021/01/31 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
法定代表人授权委托书格式
2014/10/14 职场文书
消防宣传语大全
2015/07/13 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
python 常用的异步框架汇总整理
2021/06/18 Python
Java异常处理try catch的基本用法
2021/12/06 Java/Android