gpt4 book ai didi

javascript - JavaScript 函数中的参数处理

转载 作者:行者123 更新时间:2023-11-29 18:02:34 26 4
gpt4 key购买 nike

目前我正在阅读 JavaScript 书。其中有一个我无法理解的代码片段。 repeat(3, function(n) { 行发生了什么?为什么我们可以传递参数n到函数的第二个参数 repeat ,因为在它的声明中没有关于传递参数的内容? repeat如何了解它应该传递参数 nunless功能?

function unless(test, then) {
if (!test) then();
}
function repeat(times, body) {
for (var i = 0; i < times; i++) body(i);
}
repeat(3, function(n) {
unless(n % 2, function() {
console.log(n, "is even");
});
});
// → 0 is even
// → 2 is even

最佳答案

Why we can pass parameter n to the second argument of the function repeat, because in its declaration there is nothing about passing parameters

没有n 作为repeat() 的第二个参数传递,您传递的是anonymous function。它采用单个参数,您选择将它的参数命名为n(所以传入函数的参数)

简单来说,JavaScript 中的函数就是可以执行的对象。这意味着您可以将函数作为参数传递给其他函数,或者像向对象一样向它们添加属性等。

这是对您的示例中发生的情况的说明:

函数 repeat 定义了两个参数:

repeat(times, body)

因此,您所做的只是传递一个函数作为body 参数。这样写是等价的:

var times = 3;
var body = function(n) {
unless(n % 2, function() {
console.log(n, "is even");
});
};

repeat(time, body);

How does repeat understand that it should pass parameter n to the unless function?

正如您在上面看到的,repeat 没有将任何内容传递给 unless()。这是您的匿名函数(在我上面的示例中存储在 body 中)实际上将 n 传递给 unless

关于javascript - JavaScript 函数中的参数处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com