你能解释一下这种奇怪的函数声明行为吗?

时间:2016-03-02 12:43:18

标签: javascript

你能解释一下吗?

var guessWhat = function(){ console.log('Print this!!!'); };
function guessWhat(){ console.log('Print that???'); }
guessWhat();

// output: Print this!!!

两者都在全球范围内宣布。为什么第二行不会覆盖第一行?第二个功能是否陷入了困境?

1 个答案:

答案 0 :(得分:3)

function guessWhat(){ console.log('Print that???'); } // declaration

这是一个函数声明,它是在执行任何代码之前定义的。

var guessWhat = function(){ console.log('Print this!!!'); }; // literal

这是一个函数文字,它是在运行时定义的。

所以,函数定义首先被加载(在任何代码之前),然后是函数文字,它会覆盖第一个定义,因此会出现这种行为。

了解更多here.