2012-09-10 33 views
4

可能重复:
JavaScript: var functionName = function() {} vs function functionName() {}
What is the difference between a function expression vs declaration in Javascript?为什么我应该为JavaScript中的变量分配一个函数?

我试图理解JavaScript的 “最佳实践”。

此代码是从jqfundementals.com

// create a function that will greet a person, 
// and assign the function to the `greet` variable 
var greet = function(person, message) { 
    var greeting = 'Hello, ' + person + '!'; 
    log(greeting + ' ' + message); 
}; 

greet('Jory', 'Welcome to JavaScript'); 
greet('Rebecca', 'Thanks for joining us'); 

我为什么要分配功能的迎接变量?

我第一个冲动将它写这样的:

function greet (person, message) { 
    var greeting = 'Hello, ' + person + '!'; 
    log(greeting + ' ' + message); 
}; 

这两个是实现之间的区别是什么?

+3

我有一种感觉,这已被问过。 –

+0

非常好,谢谢@Quentin的链接 –

+0

虽然这些链接回答了肤浅的问题,但我认为它留下了“为什么做这个”这个方面没有答案,因此这不应该被认为是重复的。 @NathanKoop你同意吗? – delnan

回答

-2

没有实际区别,但var窗体使您能够在使用之前声明具有递归功能。

简单的例子:

var func1, func2; 

func1 = function (count) { 
    count = count - 2; 
    if (count > 0) { 
     func2(count); 
    } 
} 

func2 = function (count) { 
    func1(count + 1); 
} 

func1(10); 

虽然

function func1 (count) { 
    count = count - 2; 
    if (count > 0) { 
     func2(count); 
    } 
} 

function func2 (count) { 
    func1(count + 1); 
} 

func1(10); 

是完全可以接受的了。由于变量提升,解释者将用前者替换它。

+1

这是不正确的。对于声明为“函数名称”的函数*语句*(与函数*表达式*不同),'name'具有相同的范围并且具有'var name'变量。 – 2012-09-10 18:23:18

+1

函数声明可能会被提起,并且如果函数在另一个函数中被调用,它会在运行时查找,而不是解析时间 - 因此推理是双重错误的。 – Quentin

+1

在JavaScript中未强制使用之前声明声明,而是应用变量提升。你的论点是什么? – Halcyon

1

这些片段之间没有任何区别,除了允许您在定义之前的行之前调用前一个函数的提升。但这只是一个让你热身的简单例子。实际上,人们不会将这些函数分配给变量,而是直接将其传递给其他函数。或者他们在表达上下文中使用它们。或者他们动态地决定要存储哪个功能。或者其他任何事情。

相关问题