gpt4 book ai didi

javascript - JS 琐事 - 在 if 条件中定义函数

转载 作者:行者123 更新时间:2023-12-01 03:36:33 38 4
gpt4 key购买 nike

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

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

...虽然这个按预期打印 function:

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

(if (x = 42) console.log(x); 按预期打印 42。)

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

最佳答案

因为命名函数表达式中的函数名称不会添加到该表达式出现的范围(与函数声明不同,其中名称​​被添加到发生的范围)。对于 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中,或在赋值的右侧等),它是一种表达。当它是独立的时,它是一个声明。

关于javascript - JS 琐事 - 在 if 条件中定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44236897/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com