Javascript 在变量中声明函数的不同方式
我对以下两种在Javascript变量中声明函数的方法感到好奇。下面两个函数声明之间有什么区别?两者似乎都有效。使用一个比另一个有什么缺点吗?在查看调试器时,它们的构造似乎略有不同 此外,我相当确定第一种方法叫做“对象文字符号”。第二种方法有正式名称吗Javascript 在变量中声明函数的不同方式,javascript,Javascript,我对以下两种在Javascript变量中声明函数的方法感到好奇。下面两个函数声明之间有什么区别?两者似乎都有效。使用一个比另一个有什么缺点吗?在查看调试器时,它们的构造似乎略有不同 此外,我相当确定第一种方法叫做“对象文字符号”。第二种方法有正式名称吗 var myVar = { testProperty: 'testProperty', // Object literal notation? testFunc: function() { con
var myVar = {
testProperty: 'testProperty',
// Object literal notation?
testFunc: function()
{
console.log('testFunc called');
},
// What's this called? 'Named function declaration'?
testFunc2()
{
console.log('testFunc2 called');
}
}
// Both work...
myVar.testFunc();
myVar.testFunc2();
在(ObjectLiteral)中定义属性(PropertyDefinition)有多种方法:
- “简单”属性定义
-
这包括ECMAScript 5添加的getter和setter
还有方法和生成器方法,由ECMAScript 6添加get PropertyName[?Yield] ( ) { FunctionBody } set PropertyName[?Yield] ( PropertySetParameterList ) { FunctionBody }
PropertyName[?Yield] ( StrictFormalParameters ) { FunctionBody } * PropertyName[?Yield] ( StrictFormalParameters[?Yield] ) { GeneratorBody }
[ AssignmentExpression[In, ?Yield] ] : AssignmentExpression[In, ?Yield]
- 属性定义 使用ECMAScript 6添加的计算属性名
PropertyName[?Yield] ( StrictFormalParameters ) { FunctionBody } * PropertyName[?Yield] ( StrictFormalParameters[?Yield] ) { GeneratorBody }
[ AssignmentExpression[In, ?Yield] ] : AssignmentExpression[In, ?Yield]
- “速记”属性定义,由ES6添加
IdentifierReference
[ AssignmentExpression[In, ?Yield] ] : AssignmentExpression[In, ?Yield]
var prop = "a",
obj = {[prop]: 1};
obj.a; // 1
IdentifierReference
var a = 1,
obj = {a};
obj.a; // 1