day35
改改小bug,看看文档,微调画面,愉快的一天
JavaScript中为什么找不到条件语句中定义的函数
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()。
其实函数也就是一个变量啊,只不过是类型是函数罢了。
函数的提升可以这么理解
if(false){
function f(){
console.log("inside f()");
}
}
等价于
var f;
if(false){
f = function(){
console.log("inside f()");
}
}
现在比较新版本的chrome和firefox下应该都是这样的,也就是说,if或是block({})内的函数声明不会被提前到外部,同时在这些地方进行函数声明也不符合规范。