可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
有什么区别:
function sum(x, y) {
return x+y;
}
// and
var sum = function (x, y) {
return x+y;
}
Run Code Online (Sandbox Code Playgroud)
为什么一个用于另一个?
Ant*_*nes 54
第一种称为命名函数,第二种称为匿名函数.
关键的实际区别在于何时可以使用sum函数.例如:-
var z = sum(2, 3);
function sum(x, y) {
return x+y;
}
Run Code Online (Sandbox Code Playgroud)
z
分配5而这个: -
var z = sum(2, 3);
var sum = function(x, y) {
return x+y;
}
Run Code Online (Sandbox Code Playgroud)
将失败,因为在第一行执行变量sum时尚未分配该函数.
在执行开始之前,对已命名的函数进行解析并将其分配给它们的名称,这就是为什么命名函数可以在其定义之前的代码中进行转换的原因.
通过代码分配函数的变量显然只能在执行超过赋值后用作函数.
Mik*_*uel 12
第一种趋向于使用有几个原因:
分号插入导致
var f = function (x) { return 4; }
(f)
Run Code Online (Sandbox Code Playgroud)
分配4到f
.
不过要记住一些注意事项.不要做
var sum = function sum(x, y) { ... };
Run Code Online (Sandbox Code Playgroud)
在IE 6上,因为它将导致创建两个函数对象.如果你这样做会特别困惑
var sum = function mySym(x, y) { ... };
Run Code Online (Sandbox Code Playgroud)
根据标准,函数sum(x,y){...}不能出现在if块或循环体内,因此不同的解释器会对待
if (0) {
function foo() { return 1; }
} else {
function foo() { return 2; }
}
return foo();
Run Code Online (Sandbox Code Playgroud)
不同.在这种情况下,你应该这样做
var foo;
if (0) {
foo = function () { return 1; }
} ...
Run Code Online (Sandbox Code Playgroud)
第一个是命名函数语句,第二个是将匿名函数表达式赋给变量.
函数语句会立即添加到其作用域中 - 您无需在调用它之前运行它,因此这有效:
var y = sum(1, 2);
function sum(x, y) {
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
但是函数表达式仅在执行代码时分配给变量,因此这不起作用:
// Error here because the function hasn't been assigned to sum yet.
var y = sum(1, 2);
var sum = function(x, y) {
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
表达式表单的一个优点是您可以使用它在不同的点为表达式分配不同的函数 - 因此您可以更改函数,或在不同条件下使用不同的函数(例如,取决于所使用的浏览器).
命名函数语句的一个优点是调试器将能够显示名称.虽然,您可以命名函数表达式:
var sum = function sum(x, y) {
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
但这可能令人困惑,因为这两个名称实际上在不同的范围内并且指的是不同的东西.
归档时间: |
|
查看次数: |
13756 次 |
最近记录: |