使用函数表达式而不是函数声明的优点?

时间:2014-04-11 12:31:14

标签: javascript function

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; } 

3 个答案:

答案 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(){...}的语法糖。

两者都有其用途,在个别情况下都具有微妙(难以量化)的优势。

一般来说,优势在于它是“一次性”功能。存在做一个单一的,快速的工作,并给它自己单独的声明将是浪费时间和空间。表达的函数没有任何东西可以做,声明的函数不能。就像我说的那样,它是微妙的,难以量化