javascript函数中的()和有啥区别? [复制]

Posted

技术标签:

【中文标题】javascript函数中的()和有啥区别? [复制]【英文标题】:What's the difference between () and in javascript functions? [duplicate]javascript函数中的()和有什么区别? [复制] 【发布时间】:2019-01-17 07:14:28 【问题描述】:

这些函数似乎在 React 教程中可以互换使用,但无法弄清楚区别......或者何时使用哪个?

const SomeVal = () => 
    ...


const SomeVal = () => (
    ...
)

【问题讨论】:

第一个替换 ... 为您的函数应该运行的代码。 我假设您指的是箭头函数(() => () => ())。前者创建了一个块,因此箭头函数可以有多个语句。后者是包含在分组运算符中的表达式的隐式返回。 这是一个我想知道答案的问题。 @Li357 你应该把它作为答案,因为它就是答案。 【参考方案1】:

这些是根本不同的。以前的箭头函数语法 () => 允许您在箭头函数的主体内拥有多个语句,即:

() => 
  console.log('Hello!');
  return 'World!';

// When called, this logs Hello! and returns World!

但后者() => () 是一个箭头函数隐式返回括在括号中的表达式(称为分组运算符)。它没有明确允许多个语句:

() => (
  'World' // only one expression that is implicitly returned
  // Would work fine without parentheses (unless you want to return an object!)
)
// When called, this function returns 'World'

当然,您也可以创建一个不可读的箭头函数,使用逗号运算符执行多个操作:

() => (console.log('Hello!'), 'World!')

反应

我假设你在 React 无状态组件中看到了这一点:

const Comp = () => (
  <div>Hello World!</div>
);

此函数(组件只是函数)隐式返回&lt;div&gt; 元素。但是,使用,您可以进行一些中间计算,而不是立即返回:

const Comp = () => 
  const msg = 'Hello World!';
  return ( // Need to explicitly return here
    <div>msg</div>
  );

【讨论】:

具有格式的 IMO 的可读性并没有那么低,特别是如果它只有几条语句。我同意在生产代码中可能不实用,但对打高尔夫球/娱乐很有用【参考方案2】:

arrow function 和 const fn = () =&gt; ... 创建一个代码块,您可以在其中包含多行代码。但是对于这种情况,您需要有一个 return 声明。

带有const fn = () =&gt; ( ... ); 的箭头函数支持单行代码并且return 语句是隐式的。函数周围的括号是可选的,因此您的函数可能看起来像

const sum = (a, b) => a + b;
const sum2 = (a, b) => (a + b);

const sumBlock = (a, b) =>  return a + b; 

本质上,两者都做同样的事情。但是,如果您只需要一条语句,后一种编写箭头函数的方式可以让您的代码稍微简洁一些。

【讨论】:

请注意,使用() 时也可以有多行,逗号分隔,最后一项是返回的内容(没有return 语句)。见developer.mozilla.org/en-US/docs/Web/javascript/Reference/…

以上是关于javascript函数中的()和有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

javascript中var s=new fun; 和var s=new fun();有啥区别?

CRC和校验和有啥区别?

echo('exit'); 和有啥区别?死;和死('退出');?

`|_| 和有啥区别?异步移动 ` 和 `异步移动 |_| `

";" 和有啥不一样和 T-SQL 中的“GO”?

< 和有啥区别?扩展基础> 和 <T 扩展基础>?