为了账号安全,请及时绑定邮箱和手机立即绑定

函数声明提升的问题

函数声明提升的问题

向前走一路繁华 2017-03-16 15:59:39
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”;对这些内容有点困惑,希望各位大神能给予解答!
查看完整描述

1 回答

已采纳
?
两年3900165

TA贡献2条经验 获得超1个赞

我给你这段代码变形一下你就明白了:

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();


查看完整回答
反对 回复 2017-03-16
  • 向前走一路繁华
    向前走一路繁华
    var a= true; if(a) { function foo() {console.log("a");} }else{ function foo() {console.log("b");} } foo(); 输出的结果是“a” 函数声明提升,else里的函数不是应该覆盖if语句中的函数,最后输出“b”才对吗?
  • 两年3900165
    两年3900165
    var a; a= true; if(a) { function foo() {console.log("a");} }else{ function foo() {console.log("b");} } // if操作因为a=true,所以function foo() {console.log("a"); foo();
  • 两年3900165
    两年3900165
    a=true,所以console.log('a'),如果a=false,那么console.log('b')
点击展开后面1
  • 1 回答
  • 0 关注
  • 1460 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信