对象内部的匿名函数

Anonymous functions inside an object

我有这样一个 Javascript 片段:

var a = {ac: 10, function(){console.log("hi")}}

浏览器不会为此抛出错误。所以它可能是有效的。

但是当我使用

var a = {ac: 10, function hi(){console.log("hi")}}

浏览器抛出错误:

Uncaught SyntaxError: Unexpected identifier

谁能告诉我如何在 Javascript

的任何场景中使用第一个代码

提前致谢

您在第一个示例中所做的称为 shorthand method names,这是一种在 js 对象中初始化函数的新方法。在您的示例中实际发生的事情是将对象键(和函数名称)的名称设为 function。但是 'function' 可以替换为任何 key/name。例如:

var a = {
  ac: 10,
  other() { console.log('inside other') }
}

您可以在此处详细了解初始化对象的不同方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer


你的第二个例子失败的原因仅仅是因为它是无效的语法。如果您从第二个示例中删除 function 这个词,它会像我认为您最初期望的那样工作。

您可以尝试这样构建它:

var obj = {
    ac: 10,
    hello: function(){
        console.log("Goodbye");
    }
}
console.log(obj.ac);
console.log(obj.hello());

这里发生的事情是 ES6 允许您使用 shorthand syntax 来定义函数。这个: const obj = { method() {} } 基本上翻译成这个 const obj = { method: function() {} }.

因此,当您使用此代码段 var a = {ac: 10, function(){console.log("hi")}} 时,您是在告诉浏览器 function 不是该对象内的保留字,而是 属性 的名称你想使用的,所以你最终得到一个对象,它有一个名为 function.

的方法

Btw, you should avoid this in the future, do not use reserved keywords for another purpose.

在第二个代码段 var a = {ac: 10, function hi(){console.log("hi")}} 中,发生的事情是您试图在对象中包含 function declaration (function hi(){console.log("hi")}),这是一个语法错误。通过为函数命名,您将对象内部方法声明的 shorthand 语法更改为函数定义。如果您为此 shorthand 语法使用正确的命名(避免保留字),或者在外部声明函数并在对象内部引用它,您应该不会有问题。