javascript箭头函数已传递未定义的参数,这如何工作?

时间:2019-07-22 00:02:32

标签: javascript arguments undefined arrow-functions

我对以下代码段感到困惑:

  let counted = countBy(text, char => {
      let script = characterScript(char.codePointAt(0));
      return script ? script.direction : "none";
  }).filter(({name}) => name != "none");

变量char在countBy函数内部定义:我试图将箭头函数分成单独的函数,以便我能理解代码,但是变量char妨碍了我们。

我试图分离代码,使箭头函数成为独立函数,因为我发现该结构非常混乱。

//这是完整的2个功能:我是JS的新手:-(

function dominantDirection(text) {
    let counted = countBy(text, char => {
        let script = characterScript(char.codePointAt(0));
        return script ? script.direction : "none";
  }).filter(({name}) => name != "none");

    if (counted.length == 0) return "ltr";

    return counted.reduce((a, b) => a.count > b.count ? a : b).name;
}
function countBy(items, groupName) {
      let counts = [];
      for (let item of items) {
          let name = groupName(item);
          let known = counts.findIndex(c => c.name == name);
          if (known == -1) {
              counts.push({name, count: 1});
          } else {
              counts[known].count++;
       }
     }
     return counts;
}

2 个答案:

答案 0 :(得分:2)

您的countBy函数收到两件事:

  1. 一组items
  2. item中的每个items调用的另一个函数,为每个项目返回其对应的组名。 countBy中另一个函数的名称为groupName,这就是为什么要用groupName(item)调用它的原因。

因此,您的dominantDirection函数会收到一个text并使用一个接收字符并对其进行逻辑处理的匿名函数按方向对字符计数(这就是countBy会调用的函数groupName)。也许更明确的说法是:

const getDirection = char => { // This line could also have been: function getDirection(char) {
  let script = characterScript(char.codePointAt(0));
  return script ? script.direction : "none";
}

function dominantDirection(text) {
    let counted = countBy(text, getDirection).filter(({name}) => name != "none");

    if (counted.length == 0) return "ltr";

    return counted.reduce((a, b) => a.count > b.count ? a : b).name;
}

我希望可以帮助您消除混乱,请随时询问是否仍然不清楚!

如果要阅读有关箭头功能的更多信息,请选中MDN web docs

答案 1 :(得分:2)

您从未回答过有关““ dominantDirection()”应该做什么的问题。

我在这里找到了答案:

  

https://www.freecodecamp.org/forum/t/reading-eloquent-javascript-can-i-ever-get-this-good/181511

     

...一个程序,用于获取字符串并确定占百分比的   总数中包含任何Unicode脚本。的   程序还解释了Unicode字符,该字符占   一个代码单元

以下是来自同一线程的一些非常有用的建议:

  

那本书(Eloquent Javascript)并不适合所有人,包括我:wink:以及其他许多人也不适合   不喜欢...

     

The Javascript Way是通俗的Javascript的更好实用的替代方案,后跟{   Programming for the Web with JavaScript

关于您的第一个问题,我希望lipusal的最出色文章为您提供所需的答案。特别是,这两个片段基本上是等效的:

python -m pip install Flask

vs。

// "Classic" JS syntax:
countBy(text, function(char) {
      var script = characterScript(char.codePointAt(0));
      return script ? script.direction : "none";
});

PS:

从Amazon.com:

Alright, but NOT a good book if you're just starting to learn JavaScript

not for beginners