【问题标题】:Why does only the variable I put at the bottom get executed without console.log?为什么只有我放在底部的变量在没有 console.log 的情况下被执行?
【发布时间】:2021-01-26 22:05:33
【问题描述】:

const a = [1, 2, 3];
const doubled = a.map((num) => {
  return num * 2;
});

const x = 2;

x;
doubled;

当我在控制台中运行上述程序时,只有底部的变量被执行。所以在上面的代码中,我只会得到两倍的输出 ([2, 4, 6]) 但不会有任何来自 x 的输出。但是如果我把 x 放在 double 之下,那么输出将是 x (2) 但没有 doubled。

为什么会发生这种情况以及我没有得到的幕后情况?

(当我对它们都进行 console.log 时,行为符合预期并且都被记录了,但我很好奇这种没有 console.log 的奇怪行为)

谢谢!

编辑:您可以通过转到https://repl.it/languages/javascript 并将上面的代码粘贴到那里来重现此内容。

【问题讨论】:

  • 我收到ReferenceError: a is not defined。请问您可以使用堆栈 sn-p 来说明您的意思吗? (见minimal reproducible example
  • @evolutionxbox 他​​格式错误,a 声明不可见。
  • 您是否将整个内容粘贴到控制台中,而不是一次输入一行?执行此操作时,控制台仅显示粘贴的最后一个表达式的值。
  • 可能。这使您可以粘贴一大块代码,而不会看到所有中间值。
  • 它与 JavaScript 和变量关系不大,只是与控制台交互工作的方式有关。

标签: javascript arrays variables console


【解决方案1】:

在控制台执行代码(有效?)使用eval执行输入到控制台的代码字符串。

eval() 返回它评估的最后一条语句的值,然后浏览器在评估期间代码产生的任何其他输出之后将其写入控制台。

因此在控制台中执行此代码的预期输出:

>>console.log("hello")

hello
undefined

因为console.log 方法返回undefined。对于您的示例,xdoubled 的值取决于 eval 评估的代码中的最后一个表达式语句。

令人困惑的是,eval 对于不是表达式语句的语句返回undefined

 "let x = [1,2,3]"

当评估为字符串时返回undefined,因为它没有值,但是

 let x;   x = [1,2,3];

在求值时返回[1,2,3],因为x=[1,2,3]; 是一个表达式语句。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 2012-02-02
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多