函数声明提升的问题

var a= true;
if(a) {
   function foo() {console.log("a");}
}else{
   function foo() {console.log("b");}
}

foo();

输出的结果是“a”


foo();
var a= true;
if(a) {
   function foo() {console.log("a");}
}else{
   function foo() {console.log("b");}
}
提示foo 不是一个函数;

最近看到函数声明提升的问题,有一些困惑,难道不支持函数提升了,可是我又测试了

foo();
function foo() {console.log("a");}
这段代码,可以输出结果“a”;

对这些内容有点困惑,希望各位大神能给予解答!

向前走一路繁华
浏览 1464回答 1
1回答

两年3900165

我给你这段代码变形一下你就明白了:var a; foo(); a= true;              // a的赋值操作是在foo函数执行后才进行的 if(a) {                  function foo() {console.log("a");}       // 函数的定义是在a赋值后才进行的,但是之前执行foo()出错,所以整个if都没有执行 }else{    function foo() {console.log("b");} }至于你说的这个代码foo(); function foo() {console.log("a");} 变形:函数的声明提升 function foo() {console.log("a");} foo();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript