这两种javascript结构之间的区别是什么
执行似乎返回相同的对象。i、 例如,myObject包含这两种javascript结构之间的区别是什么,javascript,Javascript,执行似乎返回相同的对象。i、 例如,myObject包含 var myObject = (function(){ var value = 0; return { getValue: function(){ return value; } } }()); var myObject = (function(){ var value = 0; return { getValue: function(){ return
var myObject = (function(){
var value = 0;
return {
getValue: function(){
return value;
}
}
}());
var myObject = (function(){
var value = 0;
return {
getValue: function(){
return value;
}
}
})();
在这两种情况下
我知道类似于(function(){})(
执行的东西,因为(function(){})
是一个返回函数的表达式,后面的()
执行返回的函数
但是为什么要执行
(function(){}())
?我以为这里会出现语法错误。这些短语在功能上是相同的,()
的位置是一个品味问题,我已经看到了有利于另一个的方向。就我个人而言,我更喜欢
{{
getValue: function(){
return value;
}
}}
创建函数并在括号内执行它
(function() { ... }());
在括号内创建函数,然后执行它 这些短语在功能上是完全相同的,
()
的位置是一个品味的问题,我已经看到了有利于另一个的方向。就我个人而言,我更喜欢
{{
getValue: function(){
return value;
}
}}
创建函数并在括号内执行它
(function() { ... }());
在括号内创建函数,然后执行它 它们是相同的
至于为什么(function(){}())
没有给出语法错误,但是function(){}()
给出了语法错误,我认为这是因为解析器在遇到function
时会认为它是一个函数声明,而不是一个函数表达式,但当它看到(
)时,它会抱怨,因为函数声明必须有一个名称。但是当它看到(
首先在函数之前时,这不可能是一个函数声明,所以它认为这是一个函数表达式
对于(function(){})(
,只需在调用函数表达式之前将其括在括号中即可。它们是相同的
至于为什么(function(){}())
没有给出语法错误,但是function(){}()
给出了语法错误,我认为这是因为解析器在遇到function
时会认为它是一个函数声明而不是一个函数表达式,但当它看到()
,它抱怨函数声明必须有一个名称。但是当它看到(
在函数之前先看到)时,它认为这不可能是函数声明,所以它认为这是函数表达式
对于(function(){})(
),在调用函数表达式之前,只需将其括在括号中。这在语法上是有效的,因为open paren会消除函数表达式的歧义(按照),这就是为什么function(){}()
是一个语法错误,但是(function(){}())
在语法上不是函数的原因(){}()
似乎不是一个错误。我在发布问题后尝试了这个方法。我认为这本质上意味着封闭的()
在第一种情况下被忽略。如果我错了,请纠正我。您的两个示例都将函数定义转换为函数表达式,而不仅仅是函数定义。JS解析器需要知道它是哪一个,这样它才不会出错。@ShaggyInjun哦,是的,赋值使它明确无误,我只是在尝试一个裸函数如果调用
call,您也认为这在语法上是有效的,因为open paren会消除函数表达式的歧义(按照),这就是为什么function(){}()
是一个语法错误,但是(function(){}())
在语法上不是function(){}()
似乎不是一个错误。我在发布问题后尝试了这一点。我认为这本质上意味着附上的()
在第一种情况下被忽略。如果我错了,请纠正我。您的两个示例都将函数定义转换为函数表达式,而不仅仅是函数定义。JS解析器需要知道它是哪一个,这样它才不会出错。@ShaggyInjun哦,是的,赋值使它明确无误,我只是在尝试一个裸函数不过,你说得对