以下行在JavaScript中称为函数表达式。它是否包含函数声明?
var foo = function() {};
编辑:为清晰起见而编辑。
答案 0 :(得分:3)
不,它没有。函数表达式和函数声明都定义了函数,并包含function
关键字。
它们的区别基本上取决于它们出现在源代码中的位置,它们的语法相同。它是
另请阅读http://kangax.github.io/nfe/解释所有这些术语(虽然ES6之前)。
对于评估之间的差异,请参阅var functionName = function() {} vs function functionName() {}。
答案 1 :(得分:3)
我们可以很容易地确定这不是函数声明, 根据{{3}}:
计划:
- SourceElements <子>选择子> 的
SourceElements :
- SourceElement
- SourceElements SourceElement
SourceElement :
- 声明
- FunctionDeclaration
FunctionDeclaration 只能是 SourceElement (快速搜索 FunctionDeclaration 显示没有其他语法用法)和 SourceElement 只能是 SourceElements 列表的顶级组件( Program 或 FunctionBody )。 function
的使用嵌套在赋值内,因此它不能是顶级 SourceElement 。
此外,我们还可以通过ES5 section 14将其排除为 FunctionDeclaration :
FunctionDeclaration :
function
标识符(
FormalParameterList opt)
{
FunctionBody}
您的代码没有标识符,这对 FunctionDefinitions 是必需的(但 FunctionExpressions 是可选的。)
答案 2 :(得分:1)
函数表达式定义函数但不声明函数。就像这样的代码
var foo = function() {};
定义一个函数,然后将其赋值给变量。
在哪里
function foo() {};
定义一个函数并声明它而不需要赋值。