Javascript中对象声明中的函数语句

Javascript中对象声明中的函数语句,javascript,Javascript,这是函数语句还是函数表达式?为什么我不能写这样的东西: var argument1 = { myvar : "12", mymethod : function(test) { return something; } // this line here } function func() { myvar : "12", function b(test) { return something; } } 但我可以这样写: var argument1 = {

这是函数语句还是函数表达式?为什么我不能写这样的东西:

var argument1 = {
    myvar : "12",
    mymethod : function(test) { return something; } // this line here
}
function func() {
    myvar : "12",
    function b(test) { return something; }
}
但我可以这样写:

var argument1 = {
    myvar : "12",
    function f(test) { return something; }
}

它们都是物体。前者怎么会给出错误,而后者又如何呢?

关于您的第一个代码段:
函数(x){…}
返回一个匿名函数

关于您的第二个代码段:您可以这样做:

var argument1 = {
    myvar : "12",
    mymethod : function(test) { return something; } // this line here
}
function func() {
    myvar : "12",
    function b(test) { return something; }
}
关于第三个代码段,语法
name:expr
声明了一个名为
name
的标签,而不是对象属性。(这是造成混淆的常见原因。)

函数外部的
运算符计算其两个参数并返回第二个参数。因此,您的第三个代码段标记了一行
myvar
,然后计算字符串
“12”
,并丢弃它,然后声明一个函数

  • 您正在定义一个包含对象的变量。该对象具有一个键
    mymethod
    ,该键具有分配给它的函数。它确实是一个匿名函数表达式。您可以执行类似于
    argument1.mymethod('omg')

  • 这又是一个被分配了对象的变量。然而,这个对象可能不是您所期望的。在ES6中,这将创建一个具有属性
    function
    的对象,该属性具有分配给它的匿名函数。在ES5中,这将由于语法错误而失败。e、 例如,
    argument1.function('yesss')

  • 这是一个函数声明。执行时,函数声明一个名为myvar的标签(在js中很少见),然后计算表达式
    “12”
    ,抛出结果,然后声明一个名为b的函数。此函数在执行时将返回undefined。
    操作符很有趣,标签也很有趣


  • 您将使用什么语法在argument1中调用/调用前者它是匿名的。后者也没有错误?甚至在
    myvar
    行上都没有?后两个例子在我看来都不对,只有第一个。在第一个示例中,定义了一个对象,该对象上的一个属性是函数。你想改变什么?为什么?不,没有错误。它很好用。事实上,这一行本来不应该出现在那里,当我从上面的代码复制粘贴时,我意外地留下了它。我的意图只是功能b。现在我明白了,我也可以写这个了。对这个附加问题有什么解释吗?谢谢。Protip:将您的代码片段粘贴到树视图中并检查它。它将准确地告诉您代码在结构级别的含义。此外,您还可以了解带标签的语句、函数声明、序列表达式等。另外,我想问一下,您是否使用的是旧的、ES2015之前的JavaScript版本?您的每一个示例都非常好,并且确实给出了任何编译时错误。当你说“为什么前者给出错误,而后者是好的?”,你指的是什么错误?现代JavaScript中没有错误,但旧的JavaScript中会有错误。感谢您的解释。我有个问题。为什么我不能写
    var ob={function f(){}
    但我可以写
    function f(){function b(){}
    。当
    ob
    f
    都是对象时,这里有什么区别?而且,示例中的
    test
    函数返回的匿名函数太正确了?@LearningMath您可以为匿名函数命名,如
    var obj=function f(){};
    ,这会导致定义
    obj
    f
    。或者,您不能给出名称,例如
    obj=function(){};
    ,这只会导致定义
    obj
    var object={f(){};
    是一种特殊语法。