我读In JavaScript, what is the advantage of !function(){}() over (function() {})()?然后打我,为什么使用:为什么使用(function(){})()或!function(){}()?
(function(){})()
或!function(){}()
而不是仅仅function(){}()
?
有什么具体原因吗?
我读In JavaScript, what is the advantage of !function(){}() over (function() {})()?然后打我,为什么使用:为什么使用(function(){})()或!function(){}()?
(function(){})()
或!function(){}()
而不是仅仅function(){}()
?
有什么具体原因吗?
这取决于其中你写这个。 function(){}()
本身会产生语法错误,因为它被评估为函数声明和那些需要名称。
通过使用括号或非运算符,可以强制将其解释为函数表达式,它们不需要名称。
在无论如何将其视为表达式的情况下,您可以省略括号或运算符。
我猜你会问,为什么使用:
var fn = (function(){}());
与:
var fn = function(){}();
对我来说,答案很简单,往往在RHS功能是漫长的,它不是,直到我去底部,并看到关闭()
,我意识到我一直在阅读一个函数表达式而不是函数分配。
完整的解释在Peter Michaux的An Important Pair of Parens。
RobG的答案略有差异。
许多脚本在一个函数中包含整个程序,以确保适当的范围。然后该函数立即使用最后的双括号运行。但是,这与定义可在页面中使用但最初不能运行的功能的程序略有不同。
这两种情况之间的唯一区别是最后两个字符(添加了双括号)。由于这些可能是非常长的程序,因此最初的括号表示“将立即运行”。
该程序是否需要运行?不。对于查看代码并试图理解它的人有用吗?是。
[为什么括号用来包装javascript函数调用?](http://stackoverflow.com/questions/6645766/why-are-parenthesis-used-to-wrap-a-javascript-function-呼叫) –