JavaScript函数参数问题:没有参数时如何使用参数?

时间:2019-07-06 09:17:23

标签: javascript arrays

我是JavaScript的新手,在所经历的教程中,我永远找不到对此的解释。

此示例函数计算用户名的长度。

我的问题是:函数中的“名称”如何工作?我所说的似乎完全是任意的,它是如何工作的?在我对函数进行的所有解释中,函数参数是在使用参数调用函数时使用的,但此处没有类似的东西。

在我看来,“ name.length”的工作方式类似于“ users.length”,但我不明白为什么这样写。

const users = ['Nathan', 'John', 'William'];

const nameLengths = users.map(function(name) {
   return name.length;
});

console.log(nameLengths);

2 个答案:

答案 0 :(得分:1)

这是一个匿名函数,其参数为namemap方法会在遍历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循环/