谁能解释一下这段代码的输出?

Can anybody explain me the output of this code?

提问人:Ahmad Sadiq 提问时间:1/20/2021 更新时间:1/20/2021 访问量:65

问:

这是我正在编译的代码。

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);

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

JavaScript 节点 .js 闭包 吊装 阴影

评论

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

答:

2赞 Ondolin 1/20/2021 #1

40 10 50

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

评论

0赞 1/20/2021
但是 b() 中使用的 a 与开头的 a 不同(diff 函数中的 diff var)
0赞 Ahmad Sadiq 2/8/2021
以上代码给出输出:40 10 50。当我更改函数“a”的名称时,它给出的输出是:40 40 50
2赞 user11649992 1/20/2021 #2

40 10 50

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

评论

0赞 Ahmad Sadiq 2/8/2021
以上代码给出输出:40 10 50。当我更改函数“a”的名称时,它给出的输出是:40 40 50
0赞 2/8/2021
@AhmadSadiq无需评论两次,你会得到一个答案。实际上,问题出在哪里?