来自Eloquent JavaScript的高阶函数[复制]

jjhzyzn0  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(172)
    • 此问题在此处已有答案**:

(23个答案)
昨天关门了。
我正在学习JavaScript和使用Marijn Haverbeke的Eloquent JavaScript书,我不明白下面高阶函数的工作原理,特别是变量m和n是如何赋值的。
请指示。

function greaterThan(n) {
  return m => m > n;
}
let greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true

我已经运行了这段代码,并证明了它在m〉n(真)和m〈n(假)的情况下都有效。

vawmfj5a

vawmfj5a1#

首先,有多个概念你需要理解:

*函数声明是对函数接受的内容及其行为的描述。在示例中,function greaterThan(n) { ... }m => ...是函数声明。
*函数调用是使用特定参数执行特定函数的请求。在示例中,greaterThan(10)是函数调用。
*参数是函数接受并可在以后使用的特殊局部变量。在示例中,ngreaterThan函数的参数,m是内部函数的参数。
*参数是函数调用期间传递的参数的特定值。
*函数作用域更难解释。它是一种虚拟空间,包含对特定函数中所有可见变量的引用。例如,greaterThan只看到变量n,但内部的m => m > n看到nm。这是因为另一个叫做闭包的概念。
*Closure- tldr表示内部函数可以引用所有父作用域中的变量,直到全局作用域。

现在来解释你的情况。

function greaterThan(n) {
  return m => m > n;
}

声明了一个带单参数n的函数greaterThan,该函数返回一个带单参数m的闭包匿名函数.

let greaterThan10 = greaterThan(10);

这将调用10作为参数的greaterThan函数。greaterThan返回n=10的闭包。例如:

let greaterThan10 = m => m > 10;

最后

console.log(greaterThan10(11));

调用由greaterThan返回的函数,并将11作为参数。
例如,x1米20纳米1 x-〉x1米21纳米1 x-〉x1米22纳米1 x。
我希望这对你有帮助。

zf2sa74q

zf2sa74q2#

变量ngreaterThan()的参数,因此在调用该函数时赋值。该函数返回 * 另一个 * 函数,其中一个函数的参数名为m。该参数在调用返回的函数时赋值。
因此,在您的示例中,当调用greaterThan()时,n获得值10,然后当调用该函数时,返回函数中的m获得值11。

相关问题