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')
function
的对象,该属性具有分配给它的匿名函数。在ES5中,这将由于语法错误而失败。e、 例如,argument1.function('yesss')
“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(){};
是一种特殊语法。