关于return语句和函数参数的问题

问题描述 投票:0回答:1

我是软件新手,有一段代码是数组练习的解决方案,但我不明白它为什么有效。首先,它所做的第一件事是返回您在函数中作为参数输入的字符串,那么其余的代码不应该被忽略并且不执行吗?为什么会执行?,我也不明白为什么map()方法中的箭头函数有两个参数,分别称为“word”和“index”,javascript引擎如何知道参数“word”指的是一个函数正在处理的数组内的单词是什么? (索引这个词也是一样,它怎么知道参数指的是数组的索引?)。

这是代码:

function camelize(str) {
  return str
    .split('-') // splits 'my-long-word' into 
array ['my', 'long', 'word']
    .map(
      // capitalizes first letters of all array 
items except the first one
      // converts ['my', 'long', 'word'] into 
['my', 'Long', 'Word']
      (word, index) => index == 0 ? word : 
word[0].toUpperCase() + word.slice(1)
    )
    .join(''); // joins ['my', 'Long', 'Word'] 
into 'myLongWord'
}

相关练习:https://javascript.info/task/camelcase

我尝试在 Google 上查找,但在搜索结果中没有找到相关答案。

javascript arrays function parameters camelcasing
1个回答
0
投票

让我为你分解一下。在这种情况下,注释会降低代码的可读性。删除它们。这就是你正在做的事情:

function camelize(str) {
  return str.split('-').map((word, index) => index == 0 ? word : 
  word[0].toUpperCase() + word.slice(1)).join('');
}

return 关键字返回单个值,该值是在单个语句中使用称为“方法链接”的东西计算的。

顾名思义,方法链接“链接”多个方法,使用点运算符形成单个语句。从左侧开始,在该单个语句中执行多个操作,每个方法的返回值调用下一个方法。换句话说,每个方法都作用于前一个方法返回的值。

在这种情况下,首先调用并执行

.split()
方法。它的返回值是一个字符串数组,调用
.map()
方法,该方法循环遍历该数组。在每次迭代中,其回调函数对每个元素执行指定的操作,并通过返回将新的计算值添加到新数组中。

由于回调函数是一个箭头函数,并且箭头函数隐式返回单个表达式的结果,而不使用

return
关键字,因此回调函数将新值添加到新数组中。执行后,
.map()
方法返回一个包含计算/修改值的新数组。最后,该数组调用最终的
.join()
方法,该方法使用可选分隔符(在本例中为空字符串)连接字符串数组的各个元素。

默认情况下,

.map()
方法的回调函数可以有三个参数:第一个参数是强制的,表示活动迭代中元素的值,(可选)第二个参数给出活动元素的索引,(可选)第三个引用原始数组。

这就是内置

.map()
方法的实现方式,这就是工作原理。

因此,方法链语句的结果是“驼峰化”字符串,这是

camelize
函数的
return
关键字返回的。

© www.soinside.com 2019 - 2024. All rights reserved.