- 此问题在此处已有答案**:
(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(假)的情况下都有效。
2条答案
按热度按时间vawmfj5a1#
首先,有多个概念你需要理解:
*函数声明是对函数接受的内容及其行为的描述。在示例中,
function greaterThan(n) { ... }
和m => ...
是函数声明。*函数调用是使用特定参数执行特定函数的请求。在示例中,
greaterThan(10)
是函数调用。*参数是函数接受并可在以后使用的特殊局部变量。在示例中,
n
是greaterThan
函数的参数,m
是内部函数的参数。*参数是函数调用期间传递的参数的特定值。
*函数作用域更难解释。它是一种虚拟空间,包含对特定函数中所有可见变量的引用。例如,
greaterThan
只看到变量n
,但内部的m => m > n
看到n
和m
。这是因为另一个叫做闭包的概念。*Closure- tldr表示内部函数可以引用所有父作用域中的变量,直到全局作用域。
现在来解释你的情况。
声明了一个带单参数
n
的函数greaterThan
,该函数返回一个带单参数m
的闭包匿名函数.这将调用
10
作为参数的greaterThan
函数。greaterThan
返回n=10
的闭包。例如:最后
调用由
greaterThan
返回的函数,并将11
作为参数。例如,x1米20纳米1 x-〉x1米21纳米1 x-〉x1米22纳米1 x。
我希望这对你有帮助。
zf2sa74q2#
变量
n
是greaterThan()
的参数,因此在调用该函数时赋值。该函数返回 * 另一个 * 函数,其中一个函数的参数名为m
。该参数在调用返回的函数时赋值。因此,在您的示例中,当调用
greaterThan()
时,n
获得值10,然后当调用该函数时,返回函数中的m
获得值11。