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

JavaScript中为什么找不到条件语句中定义的函数

JavaScript中为什么找不到条件语句中定义的函数

慕桂英3389331 2018-12-21 19:19:48
在Chrome中实验以下代码:function f(){    console.log("outside f()");}+function (){    if(false){        function f(){            console.log("inside f()");        }    }    f(); // Uncaught TypeError: f is not a function}();在外部定义函数f,它输出"outside f()",而在之后的IIFE中也定义了一个f,然后执行这个f函数,但是输出Uncaught TypeError: f is not a function。但是,如果我把if条件改为true,则会输出inside f()。我注意到,这个异常是TypeError类型错误,这说明它确实找到了f这个变量,但是它不是一个函数类型,这似乎表明在这个IIFE作用域中已经存在一个f变量,它屏蔽了外部的f函数。我不明白这个机制到底是怎么回事。不是说函数和变量会有一个提升过程吗?此时无论if语句是什么,内部的f应该是能找到才对,再不济还可以按照作用域链上寻查找到外部定义的f函数呀?此时内部莫名其妙多出一个名为f、值是undefined的变量是怎么回事?可以说在代码块中定义一个函数,就会多出一个与这个函数名相同的一个变量吗?如果是变量提升我还能理解,函数提升我也能理解,但是函数却以变量形式提升我就有点不明白了。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 677 浏览
慕课专栏
更多

添加回答

举报

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