输出给出肯定为“ 1function”的东西的“ 1undefined”。错误在哪里?

时间:2019-02-26 09:37:53

标签: javascript html function

下面的示例必须输出确保函数,因为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>

3 个答案:

答案 0 :(得分:3)

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
  • 测试

答案 1 :(得分:1)

您将获得undefined,因为代码中的任何地方都没有定义function f。在function中写入if statement并没有定义function。该代码只是将其假定为真实值,if语句(但实际为f)的条件不存在。您可以在外部定义f,它可以正常工作,也可以在if中执行分配,然后它也可以工作

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

答案 2 :(得分:-2)

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