1.背景介绍

函数声明

函数声明可以定义命名的函数变量,而无需给变量赋值。函数声明是一种独立的结构, 不能嵌套在非功能模块中。可以将它类比为 变量声明。就像变量声明必须以“var”开头一样,函数 声明必须以“function”开头。函数名在自身作用域和父作用域内是可获取的。

函数表达式

函数表达式将函数定义为表达式语句(通常是变量赋值)的一部分。通过函数表达式定 义的函数可以是命名的,也可以是匿名的。函数表达式不能以“function”开头。函数名在作用域外 是不可获取的。

2.知识剖析

JavaScript 中需要创建函数的话,有两种方法:函数声明、函数表达式,各自写法如下:

函数声明

函数表达式

3.常见问题

函数表达式和函数声明有什么区别?

4.解决方案


以上代码alert的时候,alert(t1)的时候显示的是t1的函数,alert(t2)的时候显示的是undefined 原因在于JavaScript中存在一种变量声明被提升的机制,也就是说变量(函数)的声明会被提升到作 用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面。t1是函数声明,被提升 到作用域最前面,所以alert(t1)依然取得到t1。t2是函数表达式,没有被提升,仍然按照从上往下 读取,所以alert(t2)取不到t2的值

5.编码实战

6.扩展思考

函数声明运行规则:

函数声明只能出现在程序或函数体内。从句法上讲,它们 不能出现在Block(块)({ ... })中, 例如不能出现在 if、while 或 for 语句中。因为 Block(块) 中只能包含Statement语句, 而不能包含函数声 明这样的源元素。另一方面,仔细看一看规则也会发现,唯一可能让表达式出现在Block(块)中情形,就是让它作 为表达式语句的一部分。但是,规范明确规定了表达式语句不能以关键字function开头。而这实际上就是说,函数 表达式同样也不能出现在Statement语句或Block(块)中(因为Block(块)就是由Statement语句构成的)。

7.参考文献

参考一:函数声明 VS 函数表达式

参考二:JavaScript探秘:函数声明与函数表达式

参考三:关于Javascript的函数声明和函数表达式

8.更多讨论

感谢大家观看

BY : 程荣强

Contact GitHub API Training Shop Blog About © 2016 GitHub, Inc. Terms Privacy Security Status He