首页 > 解决方案 > Javascript 闭包未正确显示参数

问题描述

为了学习它们,我玩了一些闭包,并编写了以下代码:

function showName(a,b,c){
  (function nombresAnidados(a){
  (function(b){
    (function(c){
      console.log("hola " + a + " " + b + " " + c);
    })(a)
  })(b)
})(c)
}

showName("cat","dog","horse");

我期待它打印出:“嗨,猫狗马”,但它打印出:“嗨,马狗马”

请在这里运行它:

    function showName(a,b,c){
      (function nombresAnidados(a){
      (function(b){
        (function(c){
          console.log("Hi, " + a + " " + b + " " + c);
        })(a)
      })(b)
    })(c)
    }
    
    showName("cat","dog","horse");

是什么导致了这种行为?

谢谢。

标签: javascriptclosures

解决方案


尝试 :

function showName(a, b, c)
  {
  (function nombresAnidados(x)  // here your arg a get the value of c
    {
    (function (y)
      {
      (function (z)
        {
        console.log(  `hi : ${x} - ${y} - ${z}` );
        })(a) // --> z   (cat)
      })(b)  // --> y   (dog)
    })(c)   // --> x   (horse)
  }

showName("cat", "dog", "horse");

注意:您的代码并不是真正的闭包;)


推荐阅读