2011-05-26 35 views
3

我刚刚购买了最新版本的“JavaScript:权威指南”,并且已经有了一个问题。 :d定义函数的JavaScript差异

是以下行语义上是相同的:

var square = function(n){ 
       return n * n; 
      }; 

function square(n){ 
    return n * n; 
} 

如果是的话,使用的是他们的优势/劣势?

感谢您的帮助!

+0

的可能重复的[是什么函数表达式VS声明在Javascript之间的差异?](http://stackoverflow.com/questions/1013385/what-is-the-difference-between-a-function-expression- vs-declaration-in-javascript) – 2011-05-26 14:13:57

+0

谢谢指出,费利克斯。这两种方法之间的差异现在已经很清楚了。 – aydio 2011-05-27 11:39:44

回答

3

检查了这一点:

a(); // prints 'A' 

function a(){ 

    console.log('A'); 

}; 

这:

b(); // throws error. b is not a function 

var b = function() { 

    console.log('B'); 

}; 

你有没有注意到有什么区别?

+0

感谢您的简单解释! – aydio 2011-05-27 11:45:55

+0

的确很好的例子! – 2011-05-27 13:40:19

3

是的,他们完全一样。

第一种方法的主要优点是,它为您提供了该函数的引用,这样,你可以把它传递给另一个函数或附加到一个对象,如果你需要。

+0

我同意第一句话,但是如果他们都做完全相同的事情,又怎么能与另一个不同? – 2011-05-26 14:04:10

+0

您可以对函数声明(传递和分配)执行相同的操作。 – 2011-05-26 14:06:36

0

不同的是,在第一个解决方案,你可以这样做:

var square = function(n){ 
       return n * n; 
      }; 

// some code 

square = function(n) { return n*n*n; } 

你有参考的功能。在另一个解决方案中,该函数是静态声明的。

免责声明:JS需要大师来告诉我,如果我错了=)。

+0

嗨克莱门特,说实话,我不明白最后一行是什么。你能否向我解释** return n * n * n; **当我想计算平方的目的? – aydio 2011-05-27 12:04:53

+0

你的例子是一个函数,它返回一个数字的平方值,但它可能是任何其他函数,确实很复杂,或者真的是上下文相关的工作。为方形方法返回'n * n * n'是愚蠢的,但仅仅是为了举例。 – 2011-05-27 13:39:41