【问题标题】:why the output is 1 2 3 13 ,whats the logic behind?为什么输出是 1 2 3 13 ,背后的逻辑是什么?
【发布时间】:2020-05-15 11:08:16
【问题描述】:

输出会是什么?任何人都可以解释输出。谁能解释一下函数是如何调用的?

var x = 0;

function hn() {
  x++;
  console.log(x);

  return (function hn() {

    x += 10;

    console.log(x);
  })
}

hn(hn())(hn());

【问题讨论】:

    标签: javascript hoisting


    【解决方案1】:

    可以通过添加消息来显示评估顺序。

    1. hn("A") 被求值,打印“A: 1”并返回一个函数(我们称之为 F1),该函数将 x 增加 10 并显示其值。

    2. hn(F1) 然后被评估。它增加 x 并打印:“function hn(msg2) {

      x += 10;

      console.log(msg2 + ": "+ x); }: 2" => 这里的信息是函数 F1(有点奇怪,好吧) 请注意,未调用 F1,仅使用它的字符串表示形式。 它返回一个将 x 增加 10 并显示其值的函数(我们称之为 F2)。

    3. hn("B") 被求值,打印“B: 3”并返回一个函数(我们称之为 F3),该函数将 x 增加 10 并显示其值。

    4. F2(F3) 被评估,它将 x 增加 10 并打印“function hn(msg2) {

      x += 10;

      console.log(msg2 + ": "+ x); }: 13" => 这里的信息是函数 F3(有点奇怪,好吧) 请注意,不调用 F3,仅使用它的字符串表示。 它返回一个将 x 增加 10 并显示其值的函数(我们称之为 F4)。

    请注意,有些函数已创建但从未调用(F1、F3、F5)。

    var x = 0;
    
    function hn(msg) {
      x++;
      console.log(msg + ": "+ x);
    
      return (function hn(msg2) {
    
        x += 10;
    
        console.log(msg2 + ": "+ x);
      })
    }
    
    hn(hn("A"))(hn("B"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多