【修真院web小课堂】函数表达式和函数声明有什么区别?
大家好,我是IT修真院成都分院第10期的学员汤镇铭,一枚正直纯洁善良的WEB程序员 今天给大家分享一下,函数表达式和函数声明有什么区别?
一、背景介绍
我们都知道函数使用FUNCTION关键字来定义,它可以用在函数定义表达式或者函数声明语句中。在这两种形式中,函数定义都从FUNCTION关键字开始。而关于这两者之间的区别,我们似乎很少去研究,所以这次我们就一起在小课堂中学习一下吧。·
二、知识剖析
什么是函数声明?
1、函数声明语句的语法:知识剖析中 DEMO1 讲解演示。
2、
(1)以FUNCTION关键字定义。
(2)接下来是要声明的函数的名称的标识符。
(3)函数名之后的圆括号中是参数列表,有多个参数的话参数之间使用逗号分隔。
(4)函数体由JAVASCRIPT语句组成,数量不限,使用花括号包裹。
3、当调用函数时,这些标识符则指代传入函数的实参。
什么是函数表达式?
1、函数表达式:知识剖析中 DEMO2 讲解演示。
2、函数定义表达式定义了一个JAVASCRIPT函数,表达式的值是这个新定义的函数。
3、一个典型的函数定义表达式包含关键字FUNCTION,跟随其后的是一对圆括号,括号内定义形参以逗号分割,然后跟随一个花括号包裹的函数体。
3、函数直接量。
三、常见问题
函数声明与函数表达式使用了相同的函数名之后是否相同?
函数声明与函数表达式有什么区别?
四、解决方案
1、函数声明中函数名是必须的;函数表达式中则是可选的。
2、即使函数声明语句和函数定义表达式包含相同的函数名,二者依然是不同的。
3、使用函数表达式的话,只有变量声明提升了——变量的初始化代码仍然在原来的位置。
4、使用函数声明的话,函数名称和函数体都提升了,脚本中所有函数和函数中所有嵌套的函数都会在当前上下文中其他代码之前声明。也就是说,可以在函数声明之前调用它。
五、编码实战
六、拓展思考
作用域与作用域链、闭包、高阶函数
七、参考文献
1、《JAVASCRIPT权威指南》
八、更多讨论
Q1:分别适用于什么场景?
A1:第一种写法更能体现函数式语言的特点:函数可以作为数据。
https://www.zhihu.com/question/47629500
Q2:函数表达式不起名字会有什么效果?
A1:函数表达式中函数名是可选的,调用的结果是一样的。取了名字之后可以在函数表达式内部进行引用。
Q3:回调与闭包的了解?
A1: 字面上的理解,回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。 其实也很好理解对吧,回调,回调,就是回头调用的意思。主函数的事先干完,回头再调用传进来的那个函数。 举一个别人举过的例子:约会结束后你送你女朋友回家,离别时,你肯定会说:“到家了给我发条信息,我很担心你。” 对不,然后你女朋友回家以后还真给你发了条信息。小伙子,你有戏了。其实这就是一个回调的过程。你留了个参数函数(要求女朋友给你发条信息)给你女朋友,然后你女朋友回家,回家的动作是主函数。她必须先回到家以后,主函数执行完了,再执行传进去的函数,然后你就收到一条信息了。
闭包则是函数中嵌套其他函数
感谢大家观看!
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
获得更多IT技能,请移步官网 点击链接直达http://www.jnshu.com/login/1/13368341