对象内的匿名函数

Har*_*nan 5 javascript anonymous-function

我有一个像这样的Javascript代码段:

var a = {ac: 10, function(){console.log("hi")}}
Run Code Online (Sandbox Code Playgroud)

浏览器没有为此抛出错误.所以它可能是有效的.

但是当我使用时

var a = {ac: 10, function hi(){console.log("hi")}}
Run Code Online (Sandbox Code Playgroud)

浏览器抛出错误:

Uncaught SyntaxError:意外的标识符

任何人都可以告诉我如何在Javascript中的任何场景中使用第一个代码

提前致谢

Mat*_*Way 7

您在第一个示例中所做的是被调用shorthand method names,并且是在js对象中初始化函数的一种新方法.在您的示例中实际发生的是,它采用对象键(和函数名称)的名称function.但'function'可以替换为任何键/名称.例如:

var a = {
  ac: 10,
  other() { console.log('inside other') }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关初始化对象的不同方法的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer


您的第二个示例失败的原因仅仅是因为它是无效的语法.如果您function从第二个示例中删除该单词,它将按照我认为您最初期望的那样工作.


小智 5

ES6允许您使用函数定义的简写语法。这:const obj = { method() {} }基本上翻译成this const obj = { method: function() {} }

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

顺便说一句,您将来应该避免这种情况,请勿将保留关键字用于其他目的。

在第二个片段中,var a = {ac: 10, function hi(){console.log("hi")}}发生的事情是您试图在一个对象中包含一个函数声明function hi(){console.log("hi")}),这是一个语法错误。通过给函数命名,可以从对象内部方法声明的简写语法更改为函数定义。如果对此速记语法使用适当的命名(避免使用保留词),或者在外部声明该函数并在对象内部引用该函数,则应该没有问题。