【问题标题】:Javascript function in Eloquent JavascriptEloquent Javascript 中的 Javascript 函数
【发布时间】:2014-01-20 15:49:43
【问题描述】:

greaterThanTen(9)如何成为返回函数中的y变量?我的意思是参数(9)如何成为返回函数参数中的y?自从greaterThanTen = greaterThan(10) 之后,9 不会被替换为x 吗? 9 不会替换 x = 10 参数吗?我只是不明白9 参数是如何在返回函数中到达y 的。

 function greaterThan(x) {
   return function(y) {
     return y > x;
   };
 }

 var greaterThanTen = greaterThan(10);
 show(greaterThanTen(9));

【问题讨论】:

标签: javascript


【解决方案1】:

它不会“成为y 变量”。函数greaterThan 返回一个函数,传递给greaterThan 的值在返回的函数中被“捕获”。

换句话说,greaterThan(10) 创建了以下函数:

function(y) { return y > 10; }

类似写法:

function greaterThan10(y) { return y > 10; }

创建函数的函数利用闭包(“'捕获' 10 的东西)。

优点是您不需要为每个要使用的号码编写greaterThanNnn 函数,您只需调用greaterThan(n) 来满足您的需要。当然,这是一个人为但流行的例子。

有关引用函数的大量信息,何时使用(),何时不使用,以及一些更实际的示例,另请参阅:

【讨论】:

  • 好的,你的回答现在真的帮助我理解了这一点。我认为我的问题是我不明白该返回函数中发生了什么。
  • @Vodka_Tonic 它正在返回 ;) 在 JS 中,函数本身可以是值,例如 42"ohai"。这很好。
【解决方案2】:

当您调用 greaterThan(10) 时,它会分配 x 的值并返回现在变成的 greaterThanTen 变量中的函数

var greaterThanTen = function(x){10>x};

然后在下一行中调用了greaterThanTen(9),因此它将分配x 值。我希望你明白我所说的。

【讨论】:

    【解决方案3】:

    您必须了解 JavaScript 中闭包概念的基础。闭包是 JavaScript 语言中最棘手和最特殊的补充。正如您会注意到的,它们遵循语言流的词汇范围。在此示例中;

     function greaterThan(x) {
       return function(y) {
         return y > x;
       };
     }
    
     var greaterThanTen = greaterThan(10);
     console.log(greaterThanTen(9));
    

    如果您看到了闭包的主要概念。一旦你调用函数greaterThan,它就会创建另一个函数。但是当您传递第一个参数 10 时,它取代了 x。进一步,当您调用函数并传递第二个参数时 9 它发生在y 内置的函数上。通过这种方式,这些值存储在函数调用堆栈中,您可以对这些值进行比较和操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-07
      • 2015-09-29
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多