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 混淆加密收藏
Jan 16 Javascript
jQuery 学习6 操纵元素显示效果的函数
Feb 07 Javascript
浅析jQuery的链式调用之each函数
Dec 03 Javascript
Jquery知识点三 jquery表单对象操作
Jan 17 Javascript
JS调用CS里的带参方法实例
Aug 01 Javascript
jQuery validate验证插件使用详解
May 11 Javascript
javascript 中null和undefined区分和比较
Apr 19 Javascript
VUE使用vuex解决模块间传值问题的方法
Jun 01 Javascript
微信小程序 监听手势滑动切换页面实例详解
Jun 15 Javascript
纯JS实现简单的日历
Jun 26 Javascript
webpack 开发和生产并行设置的方法
Nov 08 Javascript
详解Vue串联过滤器的使用场景
Apr 30 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
Wordpress php 分页代码
2009/10/21 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
可输入的下拉框
2006/06/19 Javascript
拖动一个HTML元素
2006/12/22 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
vue mounted组件的使用
2018/06/18 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
Python入门之modf()方法的使用
2015/05/15 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
python实现祝福弹窗效果
2019/04/07 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
python3字符串输出常见面试题总结
2020/12/01 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
日本航空官方网站:JAL
2019/06/19 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
生产车间主管岗位职责
2013/12/28 职场文书
银行职业规划书范文
2013/12/28 职场文书
小学教研工作制度
2014/01/15 职场文书
公司证明怎么写
2014/09/22 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers
mysql的单列多值存储实例详解
2022/04/05 MySQL