您可以使用 javascript 个函数来创建其他函数。这是如何运作的?
You can have javascript functions that create other functions. How does this work?
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// true
我正在尝试了解高阶函数。我知道上面有一个函数可以在其中创建另一个函数。我也明白 greaterThan10
存储函数: return function(m) { return m > n; };
我不明白 true
的结果如何?通过 11 不会覆盖之前通过的 10 吗? 10 和 11 是如何存储的,我不明白?谢谢
调用 var greaterThan10 = greaterThan(10);
导致 greaterThan10
具有以下值:
var greaterThan10 = function (m) { return m > 10; };
因此,以 11
作为参数调用此函数(如您的示例)returns 11 > 10
,这是正确的。
Doesn't passing the 11 override the 10 passed previously?
不,因为 greaterThan
函数用 10 调用了一次。所以,n 填充了 10。
之后 greaterThan10
函数被调用,其值 11 填充 m(不是 n 因为 greaterThan10
采用参数 m) 并且 n 根本没有被触及,因为它采用存储在greaterThan
.
的引用
请注意,greaterThan
函数不会再次调用,因此 n 不会再次填充,因此其值保持不变。
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// true
我正在尝试了解高阶函数。我知道上面有一个函数可以在其中创建另一个函数。我也明白 greaterThan10
存储函数: return function(m) { return m > n; };
我不明白 true
的结果如何?通过 11 不会覆盖之前通过的 10 吗? 10 和 11 是如何存储的,我不明白?谢谢
调用 var greaterThan10 = greaterThan(10);
导致 greaterThan10
具有以下值:
var greaterThan10 = function (m) { return m > 10; };
因此,以 11
作为参数调用此函数(如您的示例)returns 11 > 10
,这是正确的。
Doesn't passing the 11 override the 10 passed previously?
不,因为 greaterThan
函数用 10 调用了一次。所以,n 填充了 10。
之后 greaterThan10
函数被调用,其值 11 填充 m(不是 n 因为 greaterThan10
采用参数 m) 并且 n 根本没有被触及,因为它采用存储在greaterThan
.
请注意,greaterThan
函数不会再次调用,因此 n 不会再次填充,因此其值保持不变。