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 相关文章推荐
jquery解析JSON数据示例代码
Mar 17 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
Nov 04 Javascript
react-router中的属性详解
Jun 01 Javascript
Angular.js中下拉框实现渲染html的方法
Jun 18 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
微信小程序实现单选功能
Oct 30 Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 Javascript
模块化react-router配置方法详解
Jun 03 Javascript
基于原生js实现九宫格算法代码实例
Jul 03 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
Aug 31 Javascript
vue实现锚点定位功能
Jun 29 Vue.js
JavaScript中reduce()的用法
May 11 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
用javascript实现画板的代码
2007/09/05 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python编写屏幕截图程序方法
2015/02/18 Python
Python2包含中文报错的解决方法
2018/07/09 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
django rest framework 自定义返回方式
2020/07/12 Python
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
一些Solaris面试题
2015/12/22 面试题
经典的班主任推荐信
2013/10/28 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
离婚协议书格式
2014/11/21 职场文书
运动会致辞稿
2015/07/29 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers