Javascript 需要使用以下代码进行澄清

Javascript 需要使用以下代码进行澄清,javascript,Javascript,我无法理解以下代码段,该代码段用于计算指定字符串的平均长度: const str='这句话将用于计算平均字长'; const averageWordLength=str=>{ 如果(!str.includes(“”)){ 返回str.length; }; 常量{length:strLen}=str; const{length:numWords}=str.split(“”); 常量平均值=(strLen-numWords+1)/numWords; 返回平均值。toFixed(2); }; log(

我无法理解以下代码段,该代码段用于计算指定字符串的平均长度:

const str='这句话将用于计算平均字长';
const averageWordLength=str=>{
如果(!str.includes(“”)){
返回str.length;
};
常量{length:strLen}=str;
const{length:numWords}=str.split(“”);
常量平均值=(strLen-numWords+1)/numWords;
返回平均值。toFixed(2);
};
log(平均字长(str));
log(平均字长('test');

什么是
str
?str是一个全局变量,因此在函数中使用吗?函数本身?传递给函数的参数?我知道箭头函数,我怀疑有一个,但这些重叠让我困惑。提前感谢您的澄清。

因为您使用了
str
作为顶部的变量和函数中的参数名,因此
str
的值将根据您是否在函数的作用域中而有所不同

这就是所谓的。来自维基百科:

在计算机编程中,当在某个范围(决策块、方法或内部类)内声明的变量与在外部范围内声明的变量同名时,就会发生变量隐藏。在标识符级别(名称,而不是变量),这称为名称屏蔽。该外部变量被称为被内部变量遮蔽,而内部标识符被称为屏蔽外部标识符。这可能会导致混淆,因为可能不清楚隐藏变量名称的后续使用指的是哪个变量,这取决于语言的名称解析规则

通常建议避免阴影,因为它会使您很难记住您的范围以及您希望变量具有的值


让我们对示例代码进行注释,以显示作用域以及哪个变量是哪个:

/* Top level scope */
const str/* outer */ = 'This sentence will be used to calculate average word length';
/*                        ↓↓↓ new scope is created here with a new function */
const averageWordLength = str/* inner */ => {
  /* function scope */
   if(!str/* inner */.includes(' ')){
      return str/* inner */.length;
   };
   const { length: strLen } = str/* inner */;
   const { length: numWords } = str/* inner */.split(' ');
   const average = (strLen - numWords + 1) / numWords;
   return average.toFixed(2);
};
/* Top level scope */
console.log(averageWordLength(str/* outer */));
console.log(averageWordLength('test test'));


如果要处理空白,请执行以下操作:

函数avgerageWordLength(str){
设s=str.trim().split(/(?:\s |\n)+/),n=0;
for(设w/s){
n+=w.长度;
}
返回n/s长度;
}

log(avgerageWordLength('这句话将用于计算平均字长')哪个
str
?有两个。
str
指的是箭头函数
averageWordLength
之外的常量变量和其中的参数。见和。另请参见。@Quentin,这就是问题所在),因为我只看到3个字母,不知道哪个变量引用了what@SebastianSimon谢谢,我会查出来)这能回答你的问题吗?啊,所以
str
before
=>{
是参数的名称,它被传递给函数?然后我们只把全局变量传递给函数?是的,你得到了!我还编辑了添加一个变量,这有点混乱,但可能会帮助你理解tooThis没有回答这个问题。减去一表示姿势很好。谢谢!