【问题标题】:ECMAScript 6 arrow functionsECMAScript 6 箭头函数
【发布时间】:2016-08-14 04:32:01
【问题描述】:
var getTempItem = id => ({ id: id, name: "Temp" });

我知道上面的箭头函数相当于:

var getTempItem = function(id) {

    return {
        id: id,
        name: "Temp"
   };
};

但我对以下内容有点困惑

const Todo = ({ onClick, completed, text }) => (
  <li
    onClick={onClick}
    style={{
      textDecoration: completed ? 'line-through' : 'none'
    }}
  >
    {text}
 </li>
)

为什么函数参数用大括号括起来,而函数体只用括号括起来?

【问题讨论】:

    标签: javascript reactjs ecmascript-6


    【解决方案1】:

    ES6 的一些语法糖元素在这里发挥作用:

    • 参数解构:函数实际上接受一个对象,但在函数执行之前,其唯一的对象参数被解构为三个变量。基本上,如果传递给函数的参数称为 obj,则 onClick 变量将被赋值为 obj.onClick,与其他命名的解构变量相同。
    • 简洁的箭头体:只要一个表达式的箭头函数可以使用简洁的形式。例如,x => 2*x 是一个箭头函数,它返回其输入乘以 2。但是,ES6 语法规范规定,箭头后面的花括号必须被解释为语句块。因此,为了使用简洁的主体返回对象,您必须将对象表达式括在括号中。
    • JSX:括号通常用于需要跨越多行的 JSX 表达式。

    奖励:箭头函数与函数声明和函数表达式不同的一种方式是,在箭头函数(即使是一个不简洁的主体)中,argumentsthis 的值是与包含范围相同。因此使用.call.apply 调用箭头函数将不起作用,如果您希望箭头函数接受可变数量的参数,则需要使用rest 参数。

    【讨论】:

    • 只是为了补充上面解释清楚的答案,这里有一篇关于参数解构的好文章:leanpub.com/understandinges6/…
    • AddTodo = connect()(AddTodo)你能解释一下这里发生了什么吗?
    • @TA3 connect() 返回一个函数,该函数本身使用值 AddTodo 调用。阅读您正在使用的库的文档,以准确了解该代码的作用。
    【解决方案2】:

    用括号括起来的函数体返回用括号括起来的表达式的值。

    var getTempItem = id => ({ id: id, name: "Temp" });
    var getTempItem = id => {return { id: id, name: "Temp" }};
    // Identical
    

    【讨论】:

      【解决方案3】:

      用一个例子来展示它。

      参数解构:

      在这里您可以看到,虽然 logEmployee 函数接受了两个参数,但我们只是将员工对象作为代码的一部分传入。我们没有传递单个参数。因此,在运行时,员工对象的内容被提取以匹配函数期望的参数并相应地传入。

      const employee = {
       id: 1,
       name: "John",
       age: 28
      }
      
      const logEmployee = ({name, age}) => (
        console.log(name, age)
      )
      
      logEmployee(employee);
      

      请注意,该函数只需要姓名和年龄,因此只有这两个属性将从员工对象中解构。

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多