首页 > 解决方案 > 输出为肯定应该是“1function”的东西给出“1undefined”。错误在哪里?

问题描述

下面的示例必须输出确定的函数,因为 x 的值为“1”(整数),然后我们传递了一个名为“f”的参数(函数)。这个函数是做某事还是为空并不重要,但我确信——变量 f——> 指向函数。所以typeof(f)肯定会回来function

现在,添加一个整数和“函数”(因为 typeof 总是返回一个字符串)将是一个字符串 --> 1function。

现在,令人惊讶的是输出是“1undefined”。如何?

<script>

var x = 1;
if (function f(){}) {
  x += typeof f;
}
console.log(x);

</script>

根据 Ellepsis 的回答,声明不包含在 if() 大括号内,并且只返回布尔值。那么解释一下,为什么它返回3?

<script>

var x = 1;
if (y = 2) {
x = x + y; 
}
console.log(x);

</script>

标签: javascripthtmlfunction

解决方案


if (function f(){}) {

函数声明将在当前范围内创建一个同名的变量。

函数表达式只会在自身内部创建一个同名的变量。

所以变量f只存在:

if (function f(){    })
                 ^^^^
                 here

函数表达式本身作为函数求值,if语句将其作为真值,但f范围内没有变量。


那么解释一下,为什么它返回3?

您正在为变量显式分配值。该变量仍在范围内。

如果你这样做,你会得到同样的效果:

if (f = function f(){}) {

所以:

(function f(){})
  • 创建一个函数
  • 命名函数f
  • 在被调用的函数创建一个f包含对函数的引用的变量
  • 评估为一个函数,它是一个真值,由if

尽管:

(f = function f(){})
  • 创建一个函数
  • 命名函数f
  • 在被调用的函数创建一个f包含对函数的引用的变量
  • f在函数外创建一个变量
  • function f(){}评估为一个函数,f并由=
  • f = function f(){}还评估为一个函数,它是一个真值,由if

推荐阅读