Javascript语法差异

时间:2011-05-17 00:17:45

标签: javascript

这两者有什么区别?

collapse: function(fold)
{
...
...
}

function collapse(fold)
{
...
...
}

5 个答案:

答案 0 :(得分:6)

对象文字上下文之外的第一个是语法错误。

但是,我相信你在询问函数表达式和函数声明之间的区别。

你的第一个是函数表达式。您为变量分配匿名函数。它的变量定义悬挂到其范围的顶部,但不是函数的赋值。

第二个是函数声明。它的整个身体被悬挂在范围的顶部。

通常,通常使用函数表达式,因为它更具表现力。如果需要递归调用它(或者更详细的堆栈跟踪),可以给它一个名称,但是请记住IE将此名称泄露到外部范围。

Further Reading

答案 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();从任何地方调用该函数。