2016-03-02 97 views
2

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

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

// output: Print this!!! 

两者都在全局范围内声明。为什么第二行不会覆盖第一行?第二个功能是否失去了功能?

+0

也许两个FO他们存在,但存储在存储器中不同的地方,和可变的功能前解决?但是,在所有浏览器上可能都不是这样。 – Walfrat

+0

可能会被吊起! – Rayon

+0

托管做伎俩! –

回答

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

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

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

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

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

更多here.

+1

__loaded__不能是这个词... – Rayon

+0

@RayonDabre,是的。谢谢。 :) –

+1

@ orr-siloni对其他地方在同一个问题上的答案支持这一个的stackoverflow http://stackoverflow.com/a/35704772/2646455 –

相关问题