strange anonymous javascript function call
This question already has an answer here:
And you are right, it is an Immediately-Invoked Function Expression (IIFE)
You can rewrite
!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!
function(d, w){
...
}(document, window);
to
!function() {
...
}()
and it still works. This is because !
is a unary operator (just like +
, -
, and ~
-- see https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators). After an unary operator an expression is expected (and evaluated!). The expression can be a function call.
However
!function() {
...
}()
is just another expression, so you can put another unary operator in front of it:
+!function() {
...
}()
You can continue this pattern as you wish.
Note: Invoking an anonymous function this way, ignores the return value of the function. So only use this, if you are not interested in the return value.
Edit: Added an excellent reference to http://benalman.com/news/2010/11/immediately-invoked-function-expression/ which Daff mentioned in his answer.
The trick is actually the single !
operator there (the entire first line actually does the same thing). This will work just as well:
!function(d, w){
...
}(document, window);
As always I can recommend Ben Almans great article on Immediately-Invoked Function Expressions
链接地址: http://www.djcxy.com/p/17426.html上一篇: “!function($){}(window.jQuery)”的含义是什么?
下一篇: 奇怪的匿名javascript函数调用