检查 IF 语句解释中的函数



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

为什么条件充当声明?

为什么 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

未捕获的引用错误:B 未在 :11:1 处定义

一行一行的意思 -

  1. 第一行将A定义为箭头函数。
  2. 下一行比较 - 从右到左 -A已定义并具有一些值,接下来console.log(1)是函数调用,因此"评估"了它的值。并将返回值与定义的A值进行比较 - 结果证明是假的(A是函数引用,而console.log()返回undefined(。
  3. 如果 - 偏移A被定义,因此它调用A()- 因此第二行输出。
  4. 再次比较 - 类似于点(2(
  5. 再次比较 - 但没有定义B这是一个可抛出的,因此错误和从左到右 -console.log永远不会被评估。

问题-

  1. 条件充当语句 - 这是设计使然 - 尝试if(console.log())- 它们是代码在评估为真/假时执行方向的地方。在该领域发表声明可提供以下功能 -while(true){}while(someFuncIfTrue(2)){}.
  2. 4 步有效,但第 5 步无效 - point(5( 回答了这个问题。

表达式console.log(1)的计算结果为undefinedA不是undefined所以没有一个比较是真的。

但是,在返回undefined之前,console.log(1)1打印到控制台。因此,示例中的第一行和第三行来自console.log(1)console.log(1567)的评估。

console.log(1)不是结束。关闭是()=>console.log.

最新更新