2017-04-15 127 views
0

我最近开始自己学习JavaScript,并正在阅读一本名为“Eloquent JavaScript”的书。以下代码是本书中的一个示例脚本,它使我困惑:通过变量调用函数

function greaterThan(n) { 
    return function(m) { return m > n; }; 
} 
var greaterThan10 = greaterThan(10); 
console.log(greaterThan10(11)); 

有人可以解释最后两行的逻辑吗? greaterThan10是否包含真值或它是一个函数?

+0

'greaterThan10'是一个函数。 – Xufox

+2

[这个“高阶函数”在Javascript中如何工作)的可能重复(http://stackoverflow.com/questions/31176240/how-does-this-higher-order-functions-thing-works-in- JavaScript的)。你可能只是谷歌搜索“更好的雄辩的JavaScript”。 – Xufox

回答

0

看起来就起初有点混淆,但请记住,函数是JavaScript中的对象

greaterThan(n)与定义返回一个匿名函数功能:

function(m) { return m > n; } 

因此,当我们调用greaterThan(10)我们希望它返回一个对象,它实际上是一个函数:

function(m) { return m > 10; } 

稍后,我们将该对象/函数分配给变量e,并且像调用任何函数那样调用它。


总之,试想一下,我们有:

var greaterThan10 = function(m) { return m > 10; }; 
+0

感谢您的解释!它现在是有道理的:D –

1

您在倒数第二行定义greaterThan10

var greaterThan10 = greaterThan(10); 

不管在这种情况下greaterThan函数返回是什么greaterThan10将评估到。

第2行,我们看到greaterThan将返回下面的函数表达式:

function(m) { return m > n; } 

与值替换变量n后,您通过我们得到这样的:

function(m) { return m > 10; }