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 相关文章推荐
js实现点小图看大图效果的思路及示例代码
Oct 28 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
JavaScript中的高级函数
Jan 04 Javascript
vue实现评论列表功能
Oct 25 Javascript
vue 实现v-for循环回来的数据动态绑定id
Nov 07 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 jQuery
javaScript代码飘红报错看不懂?读完这篇文章再试试
Aug 19 Javascript
Vue Element plus使用方法梳理
Dec 24 Vue.js
微信小程序中插入激励视频广告并获取收益(实例代码)
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中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
基于JavaScript实现弹幕特效
2020/08/27 Javascript
vue组件生命周期详解
2017/11/07 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
python如何保证输入键入数字的方法
2019/08/23 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
python多进程使用函数封装实例
2020/05/02 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
如何写好升职自荐信
2014/01/06 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
先进教师事迹材料
2014/12/16 职场文书