为什么输出是 I am inside!

发布于 2022-09-01 13:12:52 字数 201 浏览 11 评论 0

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

  f();//I am inside!
}());

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦里人 2022-09-08 13:12:52

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

末骤雨初歇 2022-09-08 13:12:52
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,所以会报错
}())
╰沐子 2022-09-08 13:12:52

图片描述

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

只为一人 2022-09-08 13:12:52

楼主的是报错,根本不会打印出来

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文