博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读汤姆大叔的深入理解javascrip 系列2
阅读量:7023 次
发布时间:2019-06-28

本文共 1104 字,大约阅读时间需要 3 分钟。

对于函数的声明和函数表达式一直困扰我很长时间。。一直都没有细分研究。。。看了大叔的对于函数的声明、和函数表达式。

引用大叔的:

定义1:

创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符:

  函数声明:

  function 函数名称 (参数:可选){

函数体 }

  函数表达式:

  function 函数名称(可选)(参数:可选){

函数体 }

所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函数声明还是函数表达式呢?ECMAScript是通 过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。

2:

还有一种函数表达式不太常见,就是被括号括住的(function foo(){}),他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式,我们来看几个例子:

3:函数声明在条件语句内虽然可以用,但是没有被标准化,也就是说不同的环境可能有不同的执行结果,所以这样情况下,最好使用函数表达式:

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

5:表达式和声明存在着十分微妙的差别,首先,函数声明会在任何表达式被解析和求值之前先被解析和求值,即使你的声明在代码的最后一行,它也会在同作用域内第一个表达式之前被解析/求值(), 

 

原文地址:http://www.cnblogs.com/TomXu/archive/2011/12/30/2288372.html

转载于:https://www.cnblogs.com/xxtkong/archive/2012/12/20/2826584.html

你可能感兴趣的文章
seq的一些用法示例
查看>>
Java中xml与json的相互转换
查看>>
GNS3综合实验_0130
查看>>
Python模块filecmp 文件比较
查看>>
查看mysql读和写的量
查看>>
Python 使用 Xlrd/xlwt 操作 Excel
查看>>
python将日志导入数据库代码案例
查看>>
MySQL二进制包安装实例 ( 5.5 、5.6 共存 )
查看>>
zabbix 之 安装配置手册(全)
查看>>
算法学习之路|万绿丛中一点红
查看>>
Zabbix低级发现结合jstat命令自动监控Java进程(jdk 1.8版本)
查看>>
zabbix3.4.4集成graphtrees图文笔记
查看>>
国家网络安全产业园区落户北京
查看>>
算法学习之路|wifi密码
查看>>
V-4-3 访问vCenter与操作
查看>>
运维DBA的4大纪律9项注意【转】
查看>>
写python的常用工具及设置
查看>>
PLSQL Developer软件使用大全
查看>>
PHP5.3.3添加安装mcrypt模块
查看>>
salt-minion自动化安装脚本
查看>>