使用函数表达式而不是函数声明的好处?

Dan*_*ero 7 javascript function

正如所看到这里,有函数声明和函数表达式之间的一些差异。

函数表达式与函数声明相比有一个缺点,如果在声明之前对其进行调用,它将产生错误。

我只想知道使用函数表达式的好处,因为我似乎只看到上面刚刚提到的缺点。我可以举个例子...

函数表达式:

alert(foo()); // ERROR! foo wasn't loaded yet
var foo = function() { return 5; } 
Run Code Online (Sandbox Code Playgroud)

函数声明:

alert(foo()); // Alerts 5. Declarations are loaded before any code can run.
function foo() { return 5; } 
Run Code Online (Sandbox Code Playgroud)

Kar*_*non 3

除了这个非常好的答案之外,我能看到的唯一优点是动态更改函数调用。

例如这段代码:

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);
Run Code Online (Sandbox Code Playgroud)

自从您重新分配全局变量以来,它永远不会记录相同的内容,每个内部作用域函数都会更改,而此代码:

function foo(){
    console.log('foo');
}

setInterval(function(){
    function foo(){
        console.log('Changed foo');
    }

    foo()
}, 5000)

setInterval(function(){
    foo()
}, 5000)
Run Code Online (Sandbox Code Playgroud)

将记录 2 件不同的事情。您只能更改当前作用域函数,而不能更改全局函数。