In const a = b => b([ { var: "foo" }, { var: "baz" } ]);B 是函数、数组还是变量?



我正在反应教程中阅读以下代码。

const a = b =>
b([
{ var: "foo" },
{ var: "baz" }
]);

我知道有一个数组,里面有一个对象列表,但是这里的((括号是什么意思?

上面的代码显示了一个将另一个函数作为参数的函数。箭头功能使其有点混乱。()正在调用函数b

如果没有箭头功能,它将看起来像

function a(b){
return b([
{ var: "foo" },
{ var: "baz" }
])
}

下面的代码片段中显示了演示。

const a = b =>
b([
{ var: "foo" },
{ var: "baz" }
]);
const addProp = (array) => array.map(x => ({...x, newProp: "New Value"}));
console.log(a(addProp))

JavaScript 中的函数是一等公民。这意味着您可以像对待任何其他变量一样对待函数。这允许您执行诸如将它们分配给其他变量等操作:

const foo = arg => arg;
const also_foo = foo;
console.log(also_foo("hello"));

考虑到这一点,您还可以将它们传递给函数,就像使用常规变量一样。例如:

const foo = arg => arg; // foo simply just returns the argument it is given
const bar = foo_function => foo_function('bar'); // use `foo` in `bar` function
console.log(bar(foo)); // pass reference of `foo` to `bar`.

在这里,我们将foo函数的引用传递到bar函数中。这允许函数bar()通过调用foo_function('bar')来使用foo函数。

这种模式在JS中非常常见,尤其是回调(下面是使用setTimeout的示例(:

const foo = () => console.log("a");
setTimeout(foo, 1000);

如果你可以想象自己实现setTimeout,它会松散地看起来像这样:

const setTimeout = (func, time) => {
// wait `time` miliseconds
// execute func
func();
}

许多其他函数使用回调,例如高阶数组函数。虽然你不需要自己实现这些逻辑,但你可以看到如何制作自己的函数来执行回调。

但是这里的((括号是什么意思

所以,回答你的问题。如果b是一个函数,则()调用/调用该函数b。对象列表是传递到函数b的内容。

最新更新