文本中的函数示例对我来说没有意义

function example in text does not make sense to me

本文关键字:对我来说 有意义 函数 文本      更新时间:2023-09-26

通读雄辩的javascript,试图让我的头脑围绕函数,我读了这个示例代码:

function makeAddFunction(amount) {
  function add(number) {
    return number + amount;
  }
  return add;
}
var addTwo = makeAddFunction(2);
var addFive = makeAddFunction(5);
show(addTwo(1) + addFive(1));

我明白了它的要点,但是在几个小时内检查了代码并多次阅读了随附的文本后,这对我来说并没有点击:这段代码到底在做什么? add函数在哪里获取number参数?它来自show命令吗? 如果是这样,它是如何传播的?我只是没有看到它...

函数

makeAddFunction接受一个数字(amount)并返回一个函数,该函数将作为参数传入的数字添加到传递到外部函数的数字中。

function makeAddFunction(amount) {
   function add(number) {
     return number + amount;
   }
    return add;
}

调用var addTwo = makeAddFunction(2);等效于编写以下函数:

   var addTwo = function(number) {
     return number + 2;  // this function is actually returned by makeAddFunction
   }

您可以使用参数调用它addTwo(5);

这是一个小提琴:http://jsfiddle.net/Eh4LK/1/按下运行按钮来执行

首先,我认为您的片段中缺少一些代码,因为就目前而言,show 将抛出未定义。

但是,这里有足够的内容来回答您问题的核心。

1) var addTwo 将值 2 传递给 makeAddFunction。这是"金额"。addTwo 返回一个值为 2 的 add 实例。

2) var addFive 将值 5 传递给 makeAddFunction。这是"金额"。addFive 返回一个值为 5 的 add 实例。

3) addTwo 被调用,数字为 1。这将添加到之前的配置值 2 并返回 3。

4) addFive 以数字 5 调用。这将添加到之前的配置值 5 并返回 6。

5) 如果定义了一个 show 函数,它将添加 3+6 并显示 9。

add 函数从哪里获取数字参数?

=> 数字作为 add 的参数传递。当你写addTwo(1)时,1 将是数字参数。

addTwo 函数在哪里获取金额参数?

=>这称为闭包。当你运行 makeAddFunction(2) 时,值 2 作为数量传递,并被 add 函数捕获。