可能重复:
Javascript: var functionName = function() {} vs function functionName() {}
方式1:
function fancy_function(){
// Fancy stuff happening here
}
方式2:
var fancy_function = function(){
// Fancy stuff happening here, too.
}
当我只定义一个“正常”函数时,我会使用前者,我会使用一次或几次,后者当我传递一个回调另一个函数左右时,但它看起来工作两种方式都很好。
这在某种程度上真的有区别吗?
答案 0 :(得分:2)
唯一不同的是,您可以在某些情况下立即访问前者,而您必须等待后者的分配。
不要在firebug控制台/解释器中运行它来测试它,而是在真正的html页面上进行测试。
say('spotted');
function say(msg){ alert(msg) }
以上方法可行,但如果你在下面用var say = function(){}
定义了一个函数文字,它会抱怨它还没有定义。
答案 1 :(得分:2)
在第一个示例中,您将定义一个命名函数 - 该函数将始终以该名称为已知函数。定义具有相同名称的不同函数将是一个错误(除非您直接分配给窗口属性)。在第二个示例中,您将定义匿名函数并将其指定为变量的值。您可以根据需要稍后将变量的值更改为任何其他函数;当然,除非您将其存储在其他地方,否则会丢失对该过程中的匿名函数的任何引用。所以,你在两种情况下都没有做同样的事情,尽管你可以这样对待它 - 并且确保在第二种情况下使用之前定义函数,尽管这更像是变量的函数而不是功能本身。
答案 2 :(得分:2)
函数本身没有区别,但是后者为你提供了更多的灵活性,因为你有一个函数的引用,如果被覆盖它的行为方式不同。
这使你可以用后者实现你无法实现的行为;例如以下技巧“覆盖”现有函数然后调用“base”:
var myOriginalFunction = function() {
window.alert("original");
}
var original = myOriginalFunction;
var myOriginalFunction = function() {
window.alert("overridden");
original();
}
myOriginalFunction();
这会为您提供“覆盖”警报,然后是警报“原始”。
但是,如果你用前一种表示方式尝试这种方法,你会发现你陷入了一个永无止境的警报“被覆盖”。
答案 3 :(得分:0)
您可以根据具体情况使用,两者都成为window
对象的方法。后者称为匿名函数。
答案 4 :(得分:0)
就功能而言,它们的行为相同。
答案 5 :(得分:0)
使用Function(){}
样式定义的函数在整个程序中都可用,而不必在代码中先前定义,而不是在调用它们时定义。我相信它被称为“吊装”。
所以这是有效的
cow('spotted');
function cow(color){ return 'cow is '+color; }
但这会引发错误
cow('spotted');//cow isn't defined yet!
var cow=function(color){ return 'cow is '+color; }