strange anonymous javascript function call

This question already has an answer here:

  • What does the exclamation mark do before the function? 9 answers

  • 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函数调用