【问题标题】:Why can I use comma at the end of the line in the following callback function inside the map function?为什么我可以在 map 函数内的以下回调函数的行尾使用逗号?
【发布时间】:2021-04-26 09:29:18
【问题描述】:

在 javascript 中,我认为如果我们在闭包中,我们不允许以逗号结束行。为什么下面的代码sn-p异常?

如果我在k.c = 'asd' 后面加上逗号,为什么它不起作用?

let kk = [
{ a: 'asd', b: 'ddd' }, 
{ a: 'hhh', b: 'dsd' }
];

kk = kk.map(k => {
  k.a = 'new',
    k.b = 'new1',
    k.c = 'asd'
  return k
})

console.log(kk)

【问题讨论】:

  • 您可以在此处粘贴代码:astexplorer.net 并查看它是如何解析的 :) k.a = ..., k.b = ..., ... 是单个表达式,而 return ... 是一个语句。如果你在最后一个赋值后加了一个逗号,解析器也会尝试将 return ... 解释为一个表达式,但它不是一个,因此会引发错误。
  • 谢谢,我知道了。表达式和语句

标签: javascript higher-order-functions map-function


【解决方案1】:

以下是一个表达式,comma operator 有两种用法:

k.a = 'new', k.b = 'new1', k.c = 'asd'

(尾随分号在 JavaScript 中是可选的)。

然而,这是一个声明

return k

您不能将表达式和语句与逗号运算符组合在一起。

注意:此代码应使用 .forEach 而不是 .map。您应该只在返回 new 对象时使用后者,而不是在原地变异。

【讨论】:

  • 哦,我不知道这个。谢谢你。我猜你每天都会用 javascript 学习一些新东西。再次感谢
  • 我同意,这只是为了测试目的
【解决方案2】:

你的回调函数做了两件事: 给变量赋值,并返回一个值。

每个赋值都是一个表达式,多个表达式可以用逗号分隔。您的多个表达作为一个整体构成一个陈述。

回调结束时的 return 也构成一个语句。

事情是这样的:你不能用逗号分隔语句,只能用表达式!

传统上,您会以分号结束语句。在这种情况下,我认为这将帮助您形象化您的陈述之间的区别:

let kk = [{a: 'asd', b:'ddd'}, {a: 'hhh', b: 'dsd'}];

kk = kk.map(k => {
  k.a = 'new', k.b = 'new1', k.c = 'asd';
  return k;
})

console.log(kk);

我希望这有助于您了解正在发生的事情!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2019-05-09
    • 2018-02-10
    • 2020-11-01
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多