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 IFrame 强制刷新代码
Jul 23 Javascript
JavaScript组合拼接字符串的效率对比测试
Nov 06 Javascript
node.js中的path.join方法使用说明
Dec 08 Javascript
js实现禁止中文输入的方法
Jan 14 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
React服务端渲染(总结)
Jul 01 Javascript
react-native 封装选择弹出框示例(试用ios&android)
Jul 11 Javascript
JS获取当前地理位置的方法
Oct 25 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
微信小程序自定义底部弹出框
Nov 16 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 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
第十四节 命名空间 [14]
2006/10/09 PHP
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
PHP中16个高危函数整理
2019/09/19 PHP
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
详解python之简单主机批量管理工具
2017/01/27 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
详解Python:面向对象编程
2019/04/10 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
2015年市场部工作总结
2015/04/30 职场文书
2015年统战工作总结
2015/05/19 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis