[英]How does that implicit passing of function arguments in Javascript work?
我最初来自 Java 编程语言作为背景。 Java 是强类型且非常明确的(我的意思是,你必须把事情写出来,你不能只是省略它们)。 一件事,我永远不会想到的是传递给 javascript 的隐式参数是如何工作的......
举个例子:
const observer = {
next: console.log,
error: console.error,
test: console.table,
}
observer.next('HI World!')
接下来,我指定console.log,它是一个function,但我从来没有说过要接受一个值,但是在Javascript中,我显然可以将任何东西作为后缀扔给函数,并将其作为其ZC1C425268E68A784F114的参数。 这也是流水线或柯里化的基本工作原理,它将剩余的返回值作为参数......为什么会这样?
其次,例如在快递中,我有一个 function 签名,如下所示:
app.get('/', function (req, res) {
res.send('GET request to the homepage');
});
我实际上从我的 function 回调中得到了 req 和 res ,对吗? 这些不是我传递给我的回调 function 的参数吗?
编辑:有人可以再次向我解释REQ
和RES
参数的来源吗? 这个结构是如何工作的? 因为我自己定义了回调 function,但不是将 req 和 res 作为参数传递给我的回调,似乎它们是从某个地方传递回我的回调 function 内部的???!
JavaScript 中的 function 是 object 就像任何其他的一样。 这意味着 function 可以传递,可以分配给变量,并且基本上可以在任何可以使用值的地方使用。 这被称为一等函数。
例如,给定一个简单的 function 像这样:
function log(msg) {
console.log(msg);
}
这两个函数在概念上是等价的:
const log1 = log;
// same as
function log1(msg) {
log(msg);
}
如您所见,我们可以直接将 function log
分配给log1
这样的变量,然后我们可以像使用log
一样使用log1
:
log1('foobar');
一流函数的另一个用途是能够将它们作为 arguments 传递给其他函数。 像您的 Express 示例中那样采用回调的 function 被称为高阶 function 。 回调的 arguments 由该回调的调用者提供。 在您的情况下,Express 提供了req
和res
arguments。
使用回调是控制反转的一种形式。 您正在将程序那部分的控制权传递给调用者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.