可能重复:
The difference between the two functions? (“function x” vs “var x = function”)
JavaScript: var functionName = function() {} vs function functionName() {}
var test = function() {
var a = 20;
var b = 30;
return a + b;
};
function Add() {
var a = 20;
var b = 30;
return a + b;
}
这两个功能有什么区别?如果我调用add()或test(),他们都会给我相同的结果。 var
究竟做了什么?
答案 0 :(得分:3)
函数声明语法不能在块语句中使用。
法律:
function a() {
function b() {
}
}
非法:
function a() {
if (c) {
function b() {
}
}
}
你可以这样做:
function a() {
var b;
if (c) {
b = function() {
};
}
}
对于我们中间的语言书呆子,您需要参考规范的第12.1节,第13.1节和第14节。您将找到以下语法说明。
12.1阻止
语法
阻止:
{ StatementList opt }
StatementList:
声明
StatementList语句
13功能定义
语法
功能声明:
功能标识符( FormalParameterList opt ){功能体}
FunctionExpression:
功能标识符 opt ( FormalParameterList opt ){功能体} 强>
FormalParameterList:
标识符
FormalParameterList ,标识符
功能体:
SourceElements
14计划
语法
计划:
SourceElements opt
SourceElements:
SourceElement
SourceElements SourceElement
SourceElement:
声明
功能声明
答案 1 :(得分:1)
他们是不同的。 如果在声明之前调用用var声明的函数,它将抛出一个错误,因为它尚未声明。
test(); // Undefined
var test = function() {
...
};
然而,这可以在任何时间调用并在运行时定义。
test(); // OK
function test() {
...
};
答案 2 :(得分:0)
不同之处在于,在第一种情况下,您具有分配给名称的匿名函数,在第二种情况下,您具有函数声明。在大多数情况下,这种差异并不重要。重要的是
变量提升会导致整个函数声明被移动"到其包含函数的顶部,所以
foo(1,2); var foo = function(a,b){ 返回a + b; }
相当于
var foo;
foo(1, 2);
foo = function (a, b) {
return a+b;
}
(你可以看出为什么会失败。)
答案 3 :(得分:0)
您可以在其定义之前调用Add(),但不能在定义之前调用test()。
另见var functionName = function() {} vs function functionName() {}。
答案 4 :(得分:0)
var
表示您正在为匿名函数分配变量。如果您要将函数分配给变量,则可以执行以下操作:
var test = function Add() {
var a = 20;
var b = 30;
return a + b;
};
您必须命名您正在使用的功能。
您不必为变量分配函数,但如果您想保留函数中的数据,那么您应该将函数分配给变量,因此您将使用上面的代码。
答案 5 :(得分:0)
您要分配的第一个函数是变量测试变量的匿名函数。然后变量测试成为test()函数。