我是JavaScript的新手,在所经历的教程中,我永远找不到对此的解释。
此示例函数计算用户名的长度。
我的问题是:函数中的“名称”如何工作?我所说的似乎完全是任意的,它是如何工作的?在我对函数进行的所有解释中,函数参数是在使用参数调用函数时使用的,但此处没有类似的东西。
在我看来,“ name.length”的工作方式类似于“ users.length”,但我不明白为什么这样写。
const users = ['Nathan', 'John', 'William'];
const nameLengths = users.map(function(name) {
return name.length;
});
console.log(nameLengths);
答案 0 :(得分:1)
这是一个匿名函数,其参数为name
。 map
方法会在遍历users
数组时将其“馈送”给每个数组元素。
答案 1 :(得分:1)
map
中的该函数称为匿名函数,因为它没有名称。如果看到docs,则回调的参数列表为:
currentValue[, index[, array]][, thisArg]
因此map
的回调函数每次运行时都会使用currentValue
-在您的代码中,这称为name
。之所以获取它的数据,是因为map
是一个光荣的for
循环,具有几个额外的功能-如果愿意,您可以这样编写代码:
const users = ['Nathan', 'John', 'William'];
let name;
let nameLengths = [];
for (let i = 0; i < users.length; i++) {
name = users[i];
nameLengths.push(name.length);
}
console.log(nameLengths);
但是map
更容易-另外,它表明数组正在被修改/突变,因为这是map
的主要作用。上面的一个更好的版本是:
const users = ['Nathan', 'John', 'William'];
const cb = name => name.length;
let name;
let nameLengths = [];
for (let i = 0; i < users.length; i++) {
name = users[i];
nameLengths.push(cb(name));
}
console.log(nameLengths);
在上面的代码中,您可以清楚地看到map
的不同部分-cb
是匿名函数,它接受name
作为参数并返回name.length
,并且您还可以看到map
几乎是for
循环/