js函数声明提升问题

代码如下:

    var f=function (){return true};
    var g=function (){return false};
      (function(){
        console.log(g);//undefined
        if(true){
          f=function(){return false};
          function g(){return true};
        }
      })();
      console.log(f());
      console.log(g());

问题是:我理解的函数声明提升是整体提升,那么在if判断语句中的g函数应该整体提升到立即执行函数里作用域的顶部,那么控制台输出应该是一个函数,但是使用控制台打印g,输出了undefined。现在有点疑惑,函数声明提升的规则是什么?

阅读 1.4k
1 个回答

ecma262 里函数声明是块级的,而不是函数级的,跟 var 不一样。所以在外面就是 undefined 。

但是由于历史原因(浏览器对块级函数的支持早于 ecma262),各大浏览器对这个处理不大一样,参见MDN

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题