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 相关文章推荐
将字符串转换成gb2312或者utf-8编码的参数(js版)
Apr 10 Javascript
js渐变显示渐变消失示例代码
Aug 01 Javascript
使用window.prompt()实现弹出用户输入的对话框
Apr 13 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 Javascript
JS作为值的函数用法示例
Jun 20 Javascript
基于JavaScript实现添加到购物车效果附源码下载
Aug 22 Javascript
单击按钮发送验证码,出现倒计时的简单实例
Mar 17 Javascript
thinkjs 文件上传功能实例代码
Nov 08 Javascript
tangram.js库实现js类的方式实例分析
Jan 06 Javascript
JavaScript生成指定范围的时间列表
Mar 19 Javascript
JavaScript 预解析的4种实现方法解析
Sep 03 Javascript
vue 实现把路由单独分离出来
Aug 13 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&mysql(六)
2006/10/09 PHP
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
php导出CSV抽象类实例
2014/09/24 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
Python实现数字的格式化输出
2020/08/01 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
python lambda的使用详解
2021/02/26 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
高中自我鉴定
2013/12/20 职场文书
5.1手机促销活动
2014/01/17 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
python办公自动化之excel的操作
2021/05/23 Python