块、对象、未定义的键、未定义的函数

问题描述 投票:0回答:1

注意:x 在执行之前未定义。这些代码示例也在节点终端中运行。为了让它们在浏览器中运行,您需要在其前面加上

someVar=
或将其括在括号中...不知道为什么...但这不是我的主要问题。

我有这段代码

{x(arg){console.log('Hello '+arg)}}.x('world')

这似乎相当于这段代码

{x:(arg)=>{console.log('Hello '+arg)}}.x('world')

出现这种情况的原因、用例或历史是什么?我一生都无法理解为什么在第一个示例中,当提供函数执行语法时,它不会尝试调用该函数,看到它是未定义的,并抛出错误。此外,javascript 创建一个对象,其键为未定义的函数名称,参数与传递的参数匹配,主体作为此函数调用之后的块。这是什么特殊背景?

我尝试运行此程序并预期会出现错误,但出现了意外的行为。我知道包含逗号分隔的变量列表的对象文字将创建一个其键与这些变量同名的对象,但这种行为似乎不止于此。

javascript
1个回答
0
投票

它是一个“对象文字方法定义”,这就是它起作用的原因。
看这个

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#method_definitions

// Shorthand method names
const object = {
  property(parameters) {},
}
© www.soinside.com 2019 - 2024. All rights reserved.