如here所示,函数声明和函数表达式之间存在一些差异。
函数表达式与函数声明相比有一个缺点,如果在声明它之前调用它会产生错误。
我想知道只有优点来使用函数表达式,因为我似乎只看到了上面提到的缺点。我可以用一个例子......
函数表达式:
alert(foo()); // ERROR! foo wasn't loaded yet
var foo = function() { return 5; }
功能声明:
alert(foo()); // Alerts 5. Declarations are loaded before any code can run.
function foo() { return 5; }
答案 0 :(得分:2)
与very good answer一起,我能看到的唯一优势是动态更改函数调用。
例如这段代码:
function foo(){
console.log('foo');
}
function bar(){
console.log('bar');
}
var myFn = foo;
myFn();
setInterval(function(){
if(myFn === foo) myFn = bar;
else myFn = foo;
}, 5000);
setInterval(function(){
myFn()
}, 6000);
由于您重新分配全局变量,它永远不会记录相同的内容,每个innerscope函数都将在此代码中更改:
function foo(){
console.log('foo');
}
setInterval(function(){
function foo(){
console.log('Changed foo');
}
foo()
}, 5000)
setInterval(function(){
foo()
}, 5000)
将记录2个不同的东西。您只能更改当前范围功能,而不能更改全局范围。
答案 1 :(得分:2)
我的实验:在不同范围内使用该函数时需要使用的函数表达式。例如。
function outer(){
function inner(){
}
}
outer();
inner();// Error ...calling inner..will not be found..
- 这不起作用。但
var inner;
function outer(){
inner=function(){
}
}
outer();
inner();// will work
- 这会起作用
答案 2 :(得分:1)
通常,您需要在多个位置都可以访问函数时使用声明的函数。
在javascript中,声明一个函数只是foo = function(){...}
的语法糖。
两者都有其用途,在个别情况下都具有微妙(难以量化)的优势。
一般来说,优势在于它是“一次性”功能。存在做一个单一的,快速的工作,并给它自己单独的声明将是浪费时间和空间。表达的函数没有任何东西可以做,声明的函数不能。就像我说的那样,它是微妙的,难以量化