对象内部的匿名函数
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 语法使用正确的命名(避免保留字),或者在外部声明函数并在对象内部引用它,您应该不会有问题。
我有这样一个 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 语法使用正确的命名(避免保留字),或者在外部声明函数并在对象内部引用它,您应该不会有问题。