【问题标题】:Why do curly braces and/or whitespace make a difference? [duplicate]为什么花括号和/或空格会有所不同? [复制]
【发布时间】:2019-07-13 11:48:04
【问题描述】:

这是为什么-

const squareList = (arr) => {
  "use strict";
  const sqr = arr.filter((numbers) => {
    numbers > 0 && Number.isInteger(numbers)
  }).map((numbers) => {
    Math.pow(numbers, 2)
    })
  return sqr;
};

功能与此不同-

const squareddList = (arr) => { 
  "use strict";
  const sqr = arr.filter((numbers) => numbers > 0 && Number.isInteger(numbers)).map((numbers) => Math.pow(numbers, 2))
  return sqr; 
}

当它们之间的唯一区别是空格和花括号时?

当您将任意数组传递给两个函数时,第一个返回一个空数组,第二个返回一个已过滤为仅包含正整数然后平方的数组。

【问题讨论】:

标签: javascript chaining arrow-functions


【解决方案1】:

不带花括号的箭头函数隐式返回函数体中表达式的结果,因此:

const someFunction = () => 10
someFunction(); // Returns 10

等价于

const someFunction = () => {
  return 10;
}
someFunction(); // Returns 10

并且等同于:

const someFunction = () => {
  10;
}
someFunction(); // Returns undefined

【讨论】:

  • 是的。其他语言(如 C#)以类似的方式工作,但您会遇到设计时错误,因为没有对隐式“return”语句的语法支持。
【解决方案2】:

不同之处在于,在第一个中您没有return 的值。 在箭头函数中,如果放大括号则需要返回值,否则返回值。

const squareList = (arr) => {
  "use strict";
  const sqr = arr.filter((numbers) => {
    return numbers > 0 && Number.isInteger(numbers)
  }).map((numbers) => {
    return Math.pow(numbers, 2)
  })
  return sqr;
};

这会起作用。

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2020-07-02
    • 2012-08-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多