IF 语句中的检查函数说明

Checking Function inside IF statement explanation

提问人:SSIMPL3 提问时间:9/6/2019 最后编辑:sepp2kSSIMPL3 更新时间:9/6/2019 访问量:69

问:

我正在声明一个用作比较的函数。我的问题是:

为什么条件充当语句?

为什么 4 号线有效,而 5 号线不起作用?

我知道这段代码是不切实际和未使用的,但为什么编译器允许这种语法?

谷歌上没有答案。但话又说回来,我可能没有找对地方。

var A = () => console.log(3);

if (A === console.log(1)) {
  A();
};

A ? A() : null;

if (A === console.log(1567)) {};

if (B === console.log(1567)) {};

预期输出为:

3

输出为:

1

3

1567

未捕获的 ReferenceError:B 未在 :11:1 处定义

JavaScript 函数 if 语句 相等

评论


答:

0赞 rici 9/6/2019 #1

表达式的计算结果为 。 不是这样,没有一个比较是真的。console.log(1)undefinedAundefined

但是,在返回之前,将打印到控制台。因此,示例中的第一行和第三行输出行来自 和 的计算。undefinedconsole.log(1)1console.log(1)console.log(1567)

console.log(1)不是闭合。闭包是 。()=>console.log

1赞 H S 9/6/2019 #2

一行一行的意思——

  1. 定义为箭头函数的第一行。A
  2. 下一行比较 - 从右到左 - 被定义并具有一些值,接下来是函数调用,因此它的值被“评估”。并将返回值与 - 的定义值进行比较,结果证明是假的(是函数引用,而返回)。Aconsole.log(1)AAconsole.log()undefined
  3. Out of if - offcourse 被定义,因此它调用 - 因此第二行输出。AA()
  4. 再次比较 - 类似于 point(2)
  5. 再次比较 - 但没有定义哪个是可投掷的,因此错误和从左到右 - 从未评估过。Bconsole.log

问题-

  1. 条件充当语句 - 这是设计使然 - 尝试 - 它们是代码如果计算为 true/false 的地方,则执行将采取方向。在该区域中有一个语句提供了像 - 或 .if(console.log())while(true){}while(someFuncIfTrue(2)){}
  2. 第 4 步有效,但第 5 步无效 - point(5) 回答了这个问题。