繁体   English   中英

JS琐事-如果条件内部定义函数

[英]JS trivia - defining function inside if condition

为什么此代码打印undefined而不是function

if (function f(){}) {
    console.log(typeof f);
}

...虽然此打印function符合预期:

eval('function g(){}');
console.log(typeof g);

(并且if (x = 42) console.log(x);则按预期输出42

注意:我完全知道这种代码是不好的做法,而且我知道大多数短毛猫也会拒绝它,因为他们应该这么做……但是我很好奇 Java解释器的行为背后的逻辑是什么。

因为命名函数表达式中的函数名称不会添加到表达式所在的作用域中(与函数声明不同,函数声明 将名称添加到发生表达式的作用域中)。 对于NFE,名称仅在功能范围内。 您的if中的一个是NFE。 eval中的一个是声明。

例子:

 // NFE var x = function foo() { console.log("2: ", typeof foo); // function }; console.log("1: ", typeof foo); // undefined x(); // Declaration function bar() { } console.log("3: ", typeof bar); // function 

function产生被用作值时(例如,在if中或在赋值的右侧等),它是一个表达式。 当它是独立的时,它是一个声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM