Is there a difference between (function() {...}()); and (function() {...})();?
Possible Duplicate:
Location of parenthesis for auto-executing anonymous JavaScript functions?
Sometimes I see:
(function() { ... }());
and sometimes I see:
(function() { ... })();
I see both forms with and without arguments. They both execute the anonymous function.
Is there a difference between the two forms? Are there any compelling reasons to use one form over the other?
There is no practical difference in those two forms, but from a grammatical point of view the difference between the two is that The Grouping Operator - the parentheses - will hold in the first example a CallExpression
, that includes the FunctionExpression
:
CallExpression | | FunctionExpression | | | V V (function() { }()); ^ ^ |--PrimaryExpression --|
In the second example, we have first a whole CallExpression
, that holds the FunctionExpression
:
PrimaryExpression | FunctionExpression | V (function() { })(); ^ ^ |-- CallExpression --|
There is no difference between the two, so far as the compiler is concerned. However, will find that the (function () {}())
style is recommended in Douglas Crockford's JavaScript code conventions.
As far as differences go, it is really just syntactic sugar. Somewhat equivalent to: "do you like jQuery() or $()?" Both can be compiled, executed, and used interchangeably (AFAIK).
From the code samples I have seen thus far, more people seem to follow the Crockford code convention:
(function() { ... }());
Personally, I prefer the (function(){})();
convention because it is more apparent to me that the function is self-executing; I'm also a big user of jQuery and that's the convention used in jQuery source.
Additionally, it is considered good practice to use parens to enclose your self-executing function, regardless of which form you choose to go with.
链接地址: http://www.djcxy.com/p/51508.html上一篇: 是这个对象