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 相关文章推荐
页面中body onload 和 window.onload 冲突的问题的解决
Jul 01 Javascript
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
Aug 01 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
Dec 08 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
Sep 16 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
浅谈vue+webpack项目调试方法步骤
Sep 11 Javascript
JS实现简单的星期格式转换功能示例
Jul 23 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
改变layer confirm弹窗按钮的颜色方法
Sep 12 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 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
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
很可爱的输入框
2008/08/03 Javascript
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
Python如何发布程序的详细教程
2018/10/09 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
用python写爬虫简单吗
2020/07/28 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
房地产广告策划方案
2014/05/15 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python