2011-05-17 45 views
2

这两个有什么区别?Javascript语法差异

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

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

让我换个口吻:这些有什么区别? – sapiensgladio 2011-05-17 00:21:07

+0

1.分号,2.单词交换':)' – 2011-05-17 00:22:46

回答

6

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

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

您的第一个是函数表达式。您将一个匿名函数分配给一个变量。它的变量定义是,将悬挂到其作用域的顶部,但不是该函数的赋值。

第二个是函数声明。它的整个身体悬挂在示波器的顶部。

一般而言,通常使用函数表达式,因为它更具表现力。如果你需要递归地调用它(或者为了更好的详细的栈跟踪),你可以给它一个名字,但是记住IE会把这个名字泄漏到外部作用域。

Further Reading

3

第一种语法在对象上声明方法。第二个声明了一个常规函数。

+1

不一定是全局的,除非它在全局命名空间中...... – Nicole 2011-05-17 00:23:19

+0

不一定是全局的。它可以嵌套在另一个函数中。 – 2011-05-17 00:24:41

+0

采取了点。答案已纠正。 – 2011-05-17 00:28:06

0

第一个是无效的JavaScript,我假设你的意思是=而不是:。这在全球范围内是一样的,第一个使用匿名函数,第二个只是一些语法糖来命名函数。区别在于,在非全局范围中,首先会在全局范围内生成一个函数,第二个将在最近的范围中创建(对于第一个示例,使用var x = function() {}的效果相同)。

+0

它实际上是有效的,你最终会得到一个哈希函数嵌入到它,不是一个类,不太功能的土地,当定义回调作为配置的一部分时很常见。 – Stephen 2011-05-17 00:35:02

0

第一个问题是无论当前对象是什么(或者如果没有当前对象,那么它将会出错)并为其分配函数,都会创建一个名为“collapse”的属性。该函数只能通过其相关对象访问,方法是调用obj.collapse();的行。

第二个是在全局名称空间中创建一个名为“collapse”的函数(即作为window上的一个属性)。该功能可以在任何地方通过做collapse();来调用。