Javascript 为什么if()中定义的函数未定义

Javascript 为什么if()中定义的函数未定义,javascript,Javascript,变量d=1 if函数f{}{ d+=f的类型 } logd您应该在if之前创建函数,并在if中调用它 就像这样: var d = 1 function func() { return true; } if (func) { // do some thing } console.log(d) 如果函数f{}实际上没有导致定义该函数,则返回语句。由于ifs将表达式作为输入,因此条件本质上是作为函数表达式进行计算的 函数是真实值,所以如果执行分支,JavaScript解释器会在内部这样处理代码:

变量d=1 if函数f{}{ d+=f的类型 }
logd您应该在if之前创建函数,并在if中调用它

就像这样:

var d = 1
function func() {
 return true;
}
if (func) {
 // do some thing
}
console.log(d)
如果函数f{}实际上没有导致定义该函数,则返回语句。由于ifs将表达式作为输入,因此条件本质上是作为函数表达式进行计算的

函数是真实值,所以如果执行分支,JavaScript解释器会在内部这样处理代码:

var d = 1;
d += typeof f;
console.log(d);
显然,在第二条语句中没有定义f,因此结果被打印为1未定义。

如果条件是表达式,而不是语句。在您的代码中,函数f{}是一个函数表达式,而不是函数声明,它的名称f只能在它的主体中使用

如果您难以理解上述内容,以下是与您的代码等效的非正式代码:

var d = 1;
tmp = function f() {};
if (tmp) {
    delete tmp;
    d += typeof f;
}
console.log(d);
typeof将返回undefined,因为函数f尚未编程为返回任何内容。换句话说,您正试图找到尚未定义的类型

e、 g

var d=1; 函数f{ 返回2; } 如果f{ d+=f的类型 }
console.logd只考虑/访问变量声明,因此您可以执行以下操作:

变量d=1 如果g=函数f{}{ console.logtypeof g//“函数” console.logtypeof f/'未定义'
}你到底为什么要把函数声明放在IF里面?最坏的情况是每个条件都在if之间,而不是声明为什么所有的否决票?我认为这是一个有趣的问题。为什么函数声明在条件表达式中工作,它们的作用域规则是什么?这不实用,但它是有趣的行为。这不是问题的答案,问题是为什么该函数的类型没有定义,而不是如何使代码工作,因为函数f没有被编程来做任何事情,它会在if语句中给您一个问题,因为if语句会检查某些内容是否正确。在您的例子中,这两者都不是因为函数f未定义。typeof不关心函数是否返回任何内容try typeof函数{}。如果函数没有在delete tmp中执行,if语句也不会执行;这是不必要的。在命名函数表达式var foo=function bar{}中,该函数只能作为父作用域中的foo进行访问。除函数内部外,条将是未定义的body@Caffeinated.tech删除tmp;只是为了防止后续代码访问tmp。