【问题标题】:Linking arrow functions in typescript or javascript在 typescript 或 javascript 中链接箭头函数
【发布时间】:2018-07-04 23:12:44
【问题描述】:

我在“Angular 入门,第二版”一书中偶然发现了以下箭头函数代码。

let isPrime: (n: number) => boolean = n => { 
// body 
};

我想确认此细分的正确性。

  1. let isPrime = 函数名称“isPrime”
  2. (n: number) = 输入参数号“n”
  3. => boolean = 检查布尔值的箭头函数(放置逻辑的地方)
  4. =n = 我不明白这部分。这是否意味着如果我输入“在第三步中找到素数的逻辑”并且为真,你会得到满足我逻辑的“n”?
  5. => {} = 我可以将 return 或其他逻辑放在这里进行最终处理。

最后一个问题是有多少箭头函数对于链式或循环来说太多了?

我相信@Fenton 对我的理解给出了明确的解释。

@Sebastien 给了我答案,让我意识到我对箭头函数的错误解释;等号和箭头符号并不总是指向函数,也可以表示数据类型。

以下是我接受的答案的组合版本。

类型

现在让我们描述一下这个函数的类型,即接受一个数字并返回一个布尔值。

//correct usage : return boolean
let isPrime: (n: number) => boolean = n => { 
    // body
    return true
};

//incorrect usage
let isPrime: (n: number) => boolean = n => { 
    // body
    return "wrong"
};

简单

我想我会这样写,除非我有充分的理由使用箭头函数!

//correct usage : return boolean
function isPrime(n: number): boolean {
    // body
    return true;
}
//incorrect usage
function isPrime(n: number): boolean {
    // body
    return "wrong";
}

我的期末考试是这样的。

let isRightLogic: (n: number) => { host: boolean } = n => { 
   return { host: true };
}
console.log(isRightLogic(1)); // always return true but you get the idea.

【问题讨论】:

    标签: javascript typescript logic arrow-functions


    【解决方案1】:

    在您发布的代码中,(n: number) => boolean 是正在创建的函数的类型签名。函数本身只是

    n => {
      // body
    }
    

    n 是参数名称,如类型签名所示。因此 Typescript 知道传递给函数的参数应该是数字,并且函数的返回值将是 truefalse

    符号isPrime 并不是正式意义上的函数名;它是一个变量,其值恰好是那个函数。

    在纯 JavaScript 中,变量声明应该是 juss

    let isPrime = n => {
      // body
    };
    

    【讨论】:

      【解决方案2】:

      这里有一些其他的方式来看待它,它们揭示了不同的观点。

      普通

      这是老派,只是一个接受 n 的函数,它应该是一个数字,在正文中的某个地方它返回真或假。

      let isPrime = function(n) { 
          // body 
      };
      

      箭头函数

      让我们使用箭头函数,而不是 function 关键字(这里有 一些 行为变化取决于函数体)...

      let isPrime = (n) => { 
          // body 
      };
      

      去掉括号

      我们技术上不需要这些括号(尽管我认为没有它们的可读性会受到影响:

      let isPrime = n => { 
          // body 
      };
      

      类型

      现在让我们描述一下这个函数的类型,即接受一个数字并返回一个布尔值。

      let isPrime: (n: number) => boolean = n => { 
          // body 
      };
      

      简单

      我想我会这样写,除非我有充分的理由使用箭头函数!

      function isPrime(n: number): boolean {
          // body
      }
      

      【讨论】:

        【解决方案3】:

        我将把声明分成两部分

        第 1 部分 - 变量类型定义

        let isPrime: (n: number) => boolean 
        

        isPrime 变量的类型定义。在这种情况下,isPrime 将包含一个函数:

        (n: number) => boolean 
        

        它接受一个number 类型的参数并返回一个boolean

        第 2 部分 - 分配给 isPrime 变量的实际值(在 = 符号之后)

        n => { 
            // body 
        };
        

        这是实际值,根据类型定义,它是一个接受一个参数的函数……但这里不完整,因为主体中没有返回值。

        这是可以接受的:

        let isPrime: (n: number) => boolean = n => { 
            return true
        };
        

        但这会违反返回类型定义

        let isPrime: (n: number) => boolean = n => { 
            return 'wrong!';
        };
        

        为了回答你的最后一个问题,这里没有链接,只有一个变量类型定义,然后是一个赋值。

        【讨论】:

          猜你喜欢
          • 2019-06-16
          • 2017-04-18
          • 1970-01-01
          • 1970-01-01
          • 2019-01-06
          • 1970-01-01
          • 2019-12-17
          • 2022-01-17
          • 2019-05-07
          相关资源
          最近更新 更多