在网上看到一段代码:
let x = 1;
if (function f() {}) {
console.log(f); // Uncaught ReferenceError: f is not defined
x += typeof f;
}
我的疑问是,既然代码执行到 console.log(f); 报错了,说明 if 的判断条件为真,进而说明代码 function f() {} 是执行了的,那为什么 f 函数却不能访问呢?
在网上看到一段代码:
let x = 1;
if (function f() {}) {
console.log(f); // Uncaught ReferenceError: f is not defined
x += typeof f;
}
我的疑问是,既然代码执行到 console.log(f); 报错了,说明 if 的判断条件为真,进而说明代码 function f() {} 是执行了的,那为什么 f 函数却不能访问呢?
因为当function出现在表达式中,它作为“函数表达式”,会直接返回函数的引用地址。
函数表达式可以不写函数名,也就是匿名函数。如果函数表达式写了函数名,这个函数名是作为这个函数内的局部变量。只能在这个函数内访问,不能在这个函数外访问,一般只用于方便函数的递归调用。