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和DOM Interfaces来处理HTML
Oct 09 Javascript
小白谈谈对JS原型链的理解
May 03 Javascript
JS控制文本域只读或可写属性的方法
Jun 24 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
jQuery DateTimePicker 日期和时间插件示例
Jan 22 Javascript
微信小程序 Nginx环境配置详细介绍
Feb 14 Javascript
fullPage.js和CSS3实现全屏滚动效果
May 05 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
Vue-cli中为单独页面设置背景色的实现方法
Feb 11 Javascript
微信小程序云开发详细教程
May 16 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
Jan 19 Javascript
Vue CLI中模式与环境变量的深入详解
May 30 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
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
解决DataFrame排序sort的问题
2018/06/07 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
python实现四人制扑克牌游戏
2020/04/22 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
力学专业毕业生自荐信
2013/11/17 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
计生专干事迹
2014/05/28 职场文书
英语感谢信范文
2015/01/20 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL