我理解的是当函数调用的时候,会从这个自调用函数内寻找函数f,找不到的时候,就会去全局找,为什么找不到呢?在if(){}作用域中声明了一下,书上说是这个函数声明提升到了这个自调用函数内的头部了吗?if false我理解的是进不去,怎么会有提升呢?
3 回答
慕勒7123956
TA贡献35条经验 获得超15个赞
1 首先要明白函数表达式和函数声明的区别,函数声明是会被提升到作用域最上面的,即使是在if里面,这是js的自身问题,
2.下面那个为什么正常运行我就不清楚了,因为不是一个标准的立即执行表达式,如果换成标准的,依然是typeerror
小小的脾气古怪
TA贡献7条经验 获得超4个赞
这个是和ES6中全局变量挂钩的吧,function f(){}声明的不是在window下面,所以在调用f()方法的时候显示未定义,楼上使用var 定义了全局的方法是可以的。
ChiuMungZit_HK
TA贡献8条经验 获得超443个赞
var f = function() { console.log("outside") } (function() { if (false) { function f() { console.log("inside") } } f() })
这样写就可以,研究中……
添加回答
举报
0/150
提交
取消