奇怪的匿名javascript函数调用

这个问题在这里已经有了答案:

  • 该功能之前感叹号做了什么? 9个答案

  • 你说得对,它是一个立即调用函数表达式(IIFE)

    你可以重写

    !+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!
    function(d, w){
       ...
    }(document, window);
    

    !function() {
        ...
    }()
    

    它仍然有效。 这是因为! 是一元运算符(就像+-~ - 见https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators)。 在一个一元运算符之后,预期表达式(并且被评估!)。 表达式可以是一个函数调用。

    然而

    !function() {
        ...
    }()
    

    只是另一个表达式,所以你可以在它之前放置另一个一元运算符:

    +!function() {
        ...
    }()
    

    你可以按照你的意愿继续这种模式。

    注意:以这种方式调用匿名函数会忽略该函数的返回值。 所以只有使用这个,如果你对返回值不感兴趣。

    编辑:添加了一个很好的参考http://benalman.com/news/2010/11/immediately-invoked-function-expression/,达夫在他的答案中提到。


    诀窍实际上是单身! 那里的操作员(整个第一行实际上做同样的事情)。 这也会起作用:

    !function(d, w){
       ...
    }(document, window);
    

    一如既往,我可以推荐Ben Almans关于立即调用函数表达式的伟大文章

    链接地址: http://www.djcxy.com/p/17425.html

    上一篇: strange anonymous javascript function call

    下一篇: JavaScript !function(){}