Why do you need to invoke an anonymous function on the same line?

前端 未结 19 1749
走了就别回头了
走了就别回头了 2020-11-22 00:17

I was reading some posts about closures and saw this everywhere, but there is no clear explanation how it works - everytime I was just told to use it...:

//          


        
19条回答
  •  日久生厌
    2020-11-22 01:10

    An anonymous function is not a function with the name "". It is simply a function without a name.

    Like any other value in JavaScript, a function does not need a name to be created. Though it is far more useful to actually bind it to a name just like any other value.

    But like any other value, you sometimes want to use it without binding it to a name. That's the self-invoking pattern.

    Here is a function and a number, not bound, they do nothing and can never be used:

    function(){ alert("plop"); }
    2;
    

    So we have to store them in a variable to be able to use them, just like any other value:

    var f = function(){ alert("plop"); }
    var n = 2;
    

    You can also use syntatic sugar to bind the function to a variable:

    function f(){ alert("plop"); }
    var n = 2;
    

    But if naming them is not required and would lead to more confusion and less readability, you could just use them right away.

    (function(){ alert("plop"); })(); // will display "plop"
    alert(2 + 3); // will display 5
    

    Here, my function and my numbers are not bound to a variable, but they can still be used.

    Said like this, it looks like self-invoking function have no real value. But you have to keep in mind that JavaScript scope delimiter is the function and not the block ({}).

    So a self-invoking function actually has the same meaning as a C++, C# or Java block. Which means that variable created inside will not "leak" outside the scope. This is very useful in JavaScript in order not to pollute the global scope.

提交回复
热议问题