为什么输出是 I am inside!

function f() { console.log('I am outside!'); }
(function () {
  if(false) {
    // 重复声明一次函数f
    function f() { console.log('I am inside!'); }
  }

  f();//I am inside!
}());
阅读 4.5k
4 个回答

不要在if里声明函数 各个浏览器处理都不一样 你可以试试 ff 跟chrome
无非就是 一个是提升 一个没提升

function f() { console.log('I am inside!');

这块代码是函数声明,函数声明是进入上下文时候就存在,相当于如下:

(function () {
  function f() { console.log('I am inside!'); }
  if(false) {

  }
  f();
}());

补充一点————当不是函数声明,而是函数表达式的时候:


var foo = function (){console.log('i am out')}; (function () { if (false) { var foo = function (){console.log('i am in')}; } foo() // foo is not a function }())

当为函数表达式的时候,由于var声明提前至上下文前部,相当于:

(function () {
    var foo;
    if (false) {
        foo = function (){console.log('i am in')};
    }
    foo() // 此时foo为undfined,所以会报错
}())

图片描述

我用谷歌浏览器打印是 报错

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