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

Javascript 你能解释一下这种奇怪的函数声明行为吗?,javascript,Javascript,你能解释一下吗 var guessWhat = function(){ console.log('Print this!!!'); }; function guessWhat(){ console.log('Print that???'); } guessWhat(); // output: Print this!!! 两者都在全局范围中声明。为什么第二行没有覆盖第一行?第二个功能在边缘消失了吗 function guessWhat(){ console.log('Print that???

你能解释一下吗

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

// output: Print this!!!
两者都在全局范围中声明。为什么第二行没有覆盖第一行?第二个功能在边缘消失了吗

function guessWhat(){ console.log('Print that???'); } // declaration
这是一个函数声明,它是在执行任何代码之前定义的

var guessWhat = function(){ console.log('Print this!!!'); }; // literal
这是一个函数文本,在运行时定义

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


请阅读更多信息

可能它们存在,但存储在内存中的不同位置,变量在函数之前被解析?但这可能不是所有的浏览器都是如此,因为它确实起到了作用!!我在想关于
var=guessWhat
中的偏好是一个局部变量。可能优先于第2行的全局函数?loaded不能是单词…@RayonDabre,是的。谢谢。:)@orr siloni在stackoverflow的其他地方回答了同样的问题,这也支持了这个问题