什么是社区';在JavaScript中的匿名函数声明周围加几个括号的意图是什么?
这两段代码之间的语义区别是什么什么是社区';在JavaScript中的匿名函数声明周围加几个括号的意图是什么?,javascript,closures,anonymous-function,parentheses,Javascript,Closures,Anonymous Function,Parentheses,这两段代码之间的语义区别是什么 例1 var x=(函数(){}()) 例2 varx=(函数(){})() 编写的不同之处在于我们将括号对()放在哪里,它告诉JavaScript解释器立即执行代码块。从技术上讲,没有区别。如果我可以重新表述我问题的措辞并删除“语义”一词,那么新问题已经在这里得到了回答和阐述: 但是,语义部分是我的困境,我希望这条线索能有所启发。由于它是“语义的”,因此不可能有客观的答案,根据Stackoverflow的定义,我的问题无疑处于无效的边缘。然而,我可以为这个问
- 例1 var x=(函数(){}())代码>
- 例2
varx=(函数(){})()代码>
()
放在哪里,它告诉JavaScript解释器立即执行代码块。从技术上讲,没有区别。如果我可以重新表述我问题的措辞并删除“语义”一词,那么新问题已经在这里得到了回答和阐述:
但是,语义部分是我的困境,我希望这条线索能有所启发。由于它是“语义的”,因此不可能有客观的答案,根据Stackoverflow的定义,我的问题无疑处于无效的边缘。然而,我可以为这个问题的有效性辩护,这可能发生在评论中。现在,让我们继续前进
定义问题
绝大多数Java脚本编写者似乎都在使用示例2。事实上,我还没有发现这个规则有一个例外(或者我最近去了哪里?)。特别是jQuery插件开发人员,编写如下代码:
- 例3(见附件)
(函数($){})(jQuery)代码>
- 例4
function(){var local=“local variable!”;}
- 例5
function(){}()
- 例6
(函数(){}())
示例1
是我们“应该”编写代码的方式。每当我选择使用示例2
时,我只澄清闭包的使用,而不是立即执行匿名函数这一事实。但是,只要在整个代码段的外部放置澄清括号,我们就可以同时捕获这两个内容
是的,我可以批评我的推理。在示例3
中,我认为“嘿,外部引用被复制到内部的别名”很有吸引力。备选方案:
- 例7
(函数($){}(jQuery))
示例2
没有使用这种传递值技术。就我个人而言,在我编写闭包的大部分时间里,我不需要传递任何东西。尽管如此,如果我们被允许对此持原教旨主义态度,jQuery插件实践永远不会澄清匿名函数的立即执行
示例1用户
如果我的推理是正确的,那么为什么整个社区都在使用
示例1
?他们的唯一意图是只作出两项澄清中的一项吗?也许只是也许,他们甚至没有目标,但仅仅遵循一个我们无法解释的目标的传统?我还没有编写jQuery插件,也没有使用example2
,因为我是从阅读圣经开始我的职业生涯的。但是如果你是众多使用例1的人中的一员,并且有理由,请分享=)为什么?可读性
由于“可读性”的口号,很多事情都是用代码完成的。它在编写代码方面是非常宝贵的。您的代码应该很容易被其他开发人员继承
你忘了一个
或者说是零
var x=function(){}代码>为此,开发人员用括号包装了他们的自执行闭包:var selfExecuting=(function(){})()
,甚至是简单的(function(){})()代码>所以从第1行可以明显看出这是自动执行的。这还意味着,如果您遇到这样的函数:var notExecuting=function(){}代码>通常可以在第1行假设它不是自动执行的
编码时可读性非常重要。这对于维护很重要。这对于一致性很重要。这对于文档来说很重要
但是,请记住,开发代码不应该是生产代码。我喜欢你的答案,特别是示例0=)我认为你为一个重要的细节让路:自动执行闭包
。正是我内心的原教旨主义者想要把括号扩大到包容一切,而不仅仅是闭包。最后,可读性是读者对它的理解。鉴于整个社会的实践,我认为可以肯定地说,哪一种选择
var x = function(){ }();