Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数如何在Javascript中创建新函数?_Javascript - Fatal编程技术网

函数如何在Javascript中创建新函数?

函数如何在Javascript中创建新函数?,javascript,Javascript,在这本有说服力的Javascript书中,我遇到了这段代码。 我理解这是如何工作的以及参数的传递,但我无法理解的是作者关于这段代码的陈述,即这是一个可以创建另一个函数的函数 我的问题是:它是如何创建新功能的?作者调用创建新函数时发生了什么?我的意思是,我们正在创建一个名为greaterThan的函数,其中包含另一个函数,但我看不出greaterThan是如何创建另一个函数的 我向你保证,在提问之前,我读过很多类似的Qs,但找不到我想要的答案。谢谢你的时间和帮助 function greaterT

在这本有说服力的Javascript书中,我遇到了这段代码。 我理解这是如何工作的以及参数的传递,但我无法理解的是作者关于这段代码的陈述,即这是一个可以创建另一个函数的函数

我的问题是:它是如何创建新功能的?作者调用创建新函数时发生了什么?我的意思是,我们正在创建一个名为greaterThan的函数,其中包含另一个函数,但我看不出greaterThan是如何创建另一个函数的

我向你保证,在提问之前,我读过很多类似的Qs,但找不到我想要的答案。谢谢你的时间和帮助

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

正在第六行创建函数

var greaterThan10 = greaterThan(10);
这将创建一个大于10的函数
,可用于检查数字是否大于10。你可以在第7行看到它的用法

编辑: 当在第6行调用大于的函数
时,它返回嵌套函数,有效地使

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

作者调用了
greaterThan10
函数创建的一个“新函数”,在JS中,函数是一等公民。它们的行为就像任何物体一样。你可以在任何地方创建它们,将它们作为参数传递,返回它们,等等。不确定你到底不明白什么。我知道它们可以作为参数创建和传递,但我不明白这个函数是如何创建另一个函数的@Oriol@CEOUnderworld:每个函数在JS中都是一个对象。每个函数定义的计算结果都是这样一个函数。调用
greaterThan(…)
两次,它将返回两个不同的函数。@ceo在代码中有一个函数表达式(请参阅)。根据我不理解的这个问题,它创建了一个函数,但对我来说,它似乎不是重复的。有人可能会说,函数是在第2行(到第4行)中创建的。当然,它是从
greaterThan()
返回的,并分配给第6行中的一个变量,但这并不重要。它在第2行创建,并在第6行分配给变量。我不认为这是CEO Underworld的一个重要区别。让我试着理解一下,函数(m)写在第2行中,但在编写时它没有被创建,当greaterThan函数运行时,它只创建函数(m),这意味着每当函数“在”一个函数中编写时,前者可以被称为创建后者!如果这一切都错了,请原谅我,请纠正我,这是正确的。当函数以第2行的方式写入时(未指定给变量),称为匿名函数。在第6行,调用
greaterThan
函数。它返回我们的匿名函数,它记住传递给
大于
n
。因此
greaterThan10
实际上等于
函数(m){returnm>10;}谢谢你的帮助@Marcel