首页 > 解决方案 > 函数可以在没有花括号的情况下工作,并且不能与它们一起工作,为什么?

问题描述

我正在做 FreeCode 训练营的练习,这让我很困惑:

const squareList = arr =>
  arr
    .filter(num => num > 0 && num % parseInt(num) === 0)
    .map(num => Math.pow(num, 2));

const squaredIntegers = squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2]);

console.log(squaredIntegers);

这可以正常工作,但是如果我输入:

 const squareList = arr => {
      arr
        .filter(num => num > 0 && num % parseInt(num) === 0)
        .map(num => Math.pow(num, 2));
    }
    const squaredIntegers = squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2]);

    console.log(squaredIntegers);

在许多功能中通常使用的典型大括号,它不起作用。为什么?

标签: javascriptmathfunctional-programmingbracketscurly-braces

解决方案


一个是一组statements(带花括号),另一个是一个expression

(param1, param2, …, paramN) => { statements } // needs to return something
(param1, param2, …, paramN) => expression
// equivalent to: => { return expression; }

所以当你使用第一种形式时,你需要从中得到return一些东西

所以在你的非工作案例中,它应该是一个return声明

const squareList = arr => {
     return arr
        .filter(num => num > 0 && num % parseInt(num) === 0)
        .map(num => Math.pow(num, 2));
    }

任何可以计算为值的代码单元都是一个表达式

语句是执行特定操作的指令或指令集

更详细的解释在Mozilla 文档中


推荐阅读