这两者有什么区别?
collapse: function(fold)
{
...
...
}
和
function collapse(fold)
{
...
...
}
答案 0 :(得分:6)
对象文字上下文之外的第一个是语法错误。
但是,我相信你在询问函数表达式和函数声明之间的区别。
你的第一个是函数表达式。您为变量分配匿名函数。它的变量定义悬挂到其范围的顶部,但不是函数的赋值。
第二个是函数声明。它的整个身体被悬挂在范围的顶部。
通常,通常使用函数表达式,因为它更具表现力。如果需要递归调用它(或者更详细的堆栈跟踪),可以给它一个名称,但是请记住IE将此名称泄露到外部范围。
答案 1 :(得分:3)
第一个代码仅对生成 property inside an object definition 有效,如下所示:
var obj = {
collapse: function(fold)
{
...
...
}
};
通过调用obj.collapse(fold);
使用collapse(fold);
至于var name = function() { ... }
和function name() { ... }
之间的区别,请参阅:var functionName = function() {} vs function functionName() {}
答案 2 :(得分:3)
第一种语法在对象上声明一个方法。第二个声明了常规功能。
答案 3 :(得分:0)
第一个不是有效的JavaScript,我假设您的意思是=
,而不是:
。这在全局范围内是相同的,第一个使用匿名函数,第二个只是一些语法糖来命名函数。不同之处在于,在非全局范围内,第一个将在全局范围内生成函数,第二个将在最近的范围内创建(对于相同的效果,在第一个示例中使用var x = function() {}
)。
答案 4 :(得分:0)
第一个是在当前对象上创建一个名为“collapse”的属性(或者如果没有当前对象,则会出错)并为其分配一个函数。该函数只能通过其相关对象访问,方法是调用obj.collapse();
。
第二个是在全局命名空间中创建一个名为“collapse”的函数(即作为window
上的属性)。可以通过执行collapse();
从任何地方调用该函数。