【问题标题】:Can anybody explain me the output of this code?谁能解释一下这段代码的输出?
【发布时间】:2021-04-24 18:13:23
【问题描述】:

这是我正在编译的代码。

var a = 10;
var c = 5;
b(40);

function b(x) {
  a(20);
  a=40;
  c=50;
  function a() { console.log(x);}  
}

console.log(a);
console.log(c);

你能告诉我输出并解释一下吗?

【问题讨论】:

  • 这听起来像是一项任务,不应该直接在 SO 上询问 afaik。如果你详细说明一下,说明你做了哪些部分,没有得到,也许会添加一个更具体的问题,我相信人们会更愿意提供帮助:)
  • @Luca_Scorpion 也许他想问为什么是 40 10 50 而不是 40 40 50?
  • @bestPlayer_xu 也许吧?但这正是我的观点,这个问题太模糊了,无法给出一个好的答案。
  • @Luca_Scorpion 是的。整个代码没有意义(对我来说)
  • @bestPlayer_xu 是的,这就是我要问的。上面的代码给出输出:40 10 50。当我更改函数“a”的名称时,它给出输出:40 40 50

标签: javascript node.js closures hoisting shadowing


【解决方案1】:

40 10 50

首先执行 b(40)。然后 a(20) 将忽略 20 并打印 x(当前为 40)。然后将 a 设置为 40,将 c 设置为 50。然后它们都将在第 12 行和第 13 行打印。

【讨论】:

  • 但是 b() 中使用的 a 与开头的不同(diff 函数中的 diff vars)
  • 以上代码给出输出:40 10 50。当我更改函数“a”的名称时,它给出输出:40 40 50
【解决方案2】:

40 10 50

第二个是公元前 10 年,在 b() 中声明的 a 与开头声明的 var 不同(只需执行代码)。

【讨论】:

  • 以上代码给出输出:40 10 50。当我更改函数“a”的名称时,它给出输出:40 40 50
  • @AhmadSadiq 无需评论两次,您将得到一个答案。实际上,有什么问题?
猜你喜欢
  • 2021-02-27
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
相关资源
最近更新 更多