Javascript中的第一类函数

Javascript中的第一类函数,javascript,Javascript,我正在读一篇关于SitePoint的文章,这里有一个一级函数的示例: var foo = function() { console.log("Hello World!"); }; var bar = function(arg) { return arg; }; bar(foo)(); 最后一行的语法让我感到困惑,我会这样写: bar(foo()); 有人知道这两种语法是否正确,或者是否有一个很好的理由按照文章的方式来写吗?如果是,请解释原因 谢谢 威廉 有人知道这两种语法是否正确吗 有完全

我正在读一篇关于SitePoint的文章,这里有一个一级函数的示例:

var foo = function() {
 console.log("Hello World!");
};
var bar = function(arg) {
return arg;
};
bar(foo)();
最后一行的语法让我感到困惑,我会这样写:

bar(foo());
有人知道这两种语法是否正确,或者是否有一个很好的理由按照文章的方式来写吗?如果是,请解释原因

谢谢

威廉

有人知道这两种语法是否正确吗

有完全不同的

barfoo调用bar,将其作为参数传递,获取bar的返回值,然后将该返回值作为函数调用

barfoo调用foo,获取foo的返回值,然后调用bar,将foo的返回值作为参数传递给它

这篇文章的写作方式有很好的理由


这完全是一个做作的例子。根本没有实际的理由让酒吧参与其中。它只是表明,您可以像您的版本所没有的任何其他值一样传递函数。

术语一级函数通常可以被认为是以与传递变量相同的方式传递函数的能力

最后一个例子是使用foo,这是一个函数,并将其传递到另一个函数bar中。bar返回另一个函数,该函数随后立即被调用,因此在结尾处会有额外的调用。因此,这个例子的写作方式不仅仅是一种文体方法;它展示了如何传递函数,甚至传递到其他函数中

bar(foo)();
调用函数栏,使用foo函数,而不是函数的返回值作为参数。由于bar返回参数,因此bar最终返回一个函数。在末尾添加会导致执行返回的函数

bar(foo());
调用函数栏,使用foo的返回值作为参数


代码示例显示一个函数作为参数传递给另一个函数,并从该函数返回的原因是为了展示函数是对象,可以像对象一样传递。

这两个函数从根本上不同,可以实现不同的功能。让我们看看两者

bar(foo)();
这将传递对函数栏的引用作为函数栏的唯一参数,函数栏会立即返回传递的函数作为返回值,然后通过final执行

本质上,这是执行foo的一种费力的方式


这首先执行foo并将返回值(不算什么)作为唯一的参数传递给bar。没有进一步的变化。

结果将是相同的,但这两种语法的作用不同。在编写barfoo时;,bar返回一个函数,然后调用该函数。这意味着:

bar方法主体中的arg包含对foo的引用; 在foo之前执行bar; 返回一个函数。 编写barfoo时,首先调用foo,然后将其结果传递给bar。这意味着:

bar方法主体中的arg包含对字符串Hello World的引用 福被称为第一 返回一个字符串 编写foo时,引用的是函数foo,而不是该函数返回的值。未执行该函数

bar(foo());
当您编写foo时,您正在执行函数并返回其值

所以,当您说barfoo时,您是将函数foo作为参数传递给bar。由于bar返回它接收到的任何参数,所以这次它返回函数foo,然后它就被执行了

bar(foo());
简单来说,这就是正在发生的事情:

var foo=函数{ console.logHello World!; }; var bar=functionarg{ 返回arg; }; var returnFromBar=barfoo;
从酒吧返回;这两者之间的区别在于,是什么让函数成为JS中的第一类函数。该站点上的示例说明了一个事实,即函数是一种可以传递的数据类型,而不仅仅是调用。我想这篇文章会为你澄清:只是对你的评论,没有实际的理由。这是一个理论性的例子,所以推理纯粹是理论性的。@AlinPurcaru-是的,这就是上一句和下一句的意思。不是争论,只是试图强调我认为最重要的部分。