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; }
}
它们都是对象。前者怎么能给出错误而后者是好的?
答案 0 :(得分:2)
您正在定义一个包含对象的变量。该对象具有一个键mymethod
,该键具有分配给它的功能。它确实是一个匿名函数表达式。您可以执行argument1.mymethod('omg')
这又是一个被赋予对象的变量。但是这个对象可能不是你所期望的。在ES6中,这将创建一个具有属性function
的对象,该对象具有分配给它的匿名函数。在ES5中,这将失败并出现语法错误。例如,argument1.function('yessss')
。
这是一个函数声明。执行时,函数声明一个名为myvar的标签(在js中很少见),然后计算表达式"12"
,抛出结果,然后声明一个名为b的函数。执行时,此函数将返回undefined。 ,
运营商很有趣,标签很有趣。
答案 1 :(得分:1)
关于您的第一个代码段:function(x) { ... }
返回匿名函数。
关于你的第二个片段:你可以这样做:
var argument1 = {
myvar: "12",
test() { return something; }
};
关于第三个代码段,语法name: expr
声明了一个名为name
的标签,而不是对象属性。 (这是混淆的常见原因。)
函数外部的,
运算符会计算其两个参数并返回第二个参数。因此,您的第三个代码段标记了一行myvar
,然后评估字符串"12"
并将其丢弃,然后声明一个函数。