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使用手册之 事件处理
Mar 24 Javascript
Javascript学习笔记6 prototype的提出
Jan 11 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
Apr 27 Javascript
实现web打印的各种方法介绍及实现代码
Jan 09 Javascript
javascript中的onkeyup和onkeydown区别介绍
Apr 28 Javascript
jquery $.each()使用探讨
Sep 23 Javascript
通过jquery 获取URL参数并进行转码
Aug 18 Javascript
JS随机调用指定函数的方法
Jul 01 Javascript
详解Python中logging日志模块在多进程环境下的使用
Dec 26 Javascript
node中IO以及定时器优先级详解
May 10 Javascript
Vue将props值实时传递 并可修改的操作
Aug 09 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 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语法速查表
2006/12/06 PHP
php2html php生成静态页函数
2008/12/08 PHP
php explode函数实例代码
2012/02/27 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php读取excel文件的简单实例
2013/08/26 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
回顾Javascript React基础
2019/06/15 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
python执行等待程序直到第二天零点的方法
2015/04/23 Python
自己使用总结Python程序代码片段
2015/06/02 Python
使用Python解析JSON数据的基本方法
2015/10/15 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
求职信范文怎么写
2014/01/29 职场文书
小学毕业感言50字
2014/02/16 职场文书
书香校园活动方案
2014/02/28 职场文书
停发工资证明范本
2015/06/12 职场文书
旅游投诉信范文
2015/07/02 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript