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

时间:2017-11-03 18:52:32

标签: javascript

var argument1 = {
    myvar : "12",
    mymethod : function(test) { return something; } // this line here
}

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

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

但我可以这样写:

function func() {
    myvar : "12",
    function b(test) { return something; }
}

它们都是对象。前者怎么能给出错误而后者是好的?

2 个答案:

答案 0 :(得分:2)

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

  2. 之类的操作
  3. 这又是一个被赋予对象的变量。但是这个对象可能不是你所期望的。在ES6中,这将创建一个具有属性function的对象,该对象具有分配给它的匿名函数。在ES5中,这将失败并出现语法错误。例如,argument1.function('yessss')

  4. 这是一个函数声明。执行时,函数声明一个名为myvar的标签(在js中很少见),然后计算表达式"12",抛出结果,然后声明一个名为b的函数。执行时,此函数将返回undefined。 ,运营商很有趣,标签很有趣。

答案 1 :(得分:1)

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

关于你的第二个片段:你可以这样做:

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

关于第三个代码段,语法name: expr声明了一个名为name的标签,而不是对象属性。 (这是混淆的常见原因。)

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