Explain the encapsulated anonymous function syntax

后端 未结 10 1459
时光说笑
时光说笑 2020-11-21 07:02

Summary

Can you explain the reasoning behind the syntax for encapsulated anonymous functions in JavaScript? Why does this work: (function(){})(); but

10条回答
  •  醉酒成梦
    2020-11-21 07:30

    Even though this is an old question and answer, it discusses a topic that to this day throws many developers for a loop. I can't count the number of JavaScript developer candidates I've interviewed who couldn't tell me the difference between a function declaration and a function expression and who had no clue what an immediately invoked function expression is.

    I'd like to mention, though, one very important thing which is that Premasagar's code snippet wouldn't work even if he had given it a name identifier.

    function someName() {
        alert(2 + 2);
    }();
    

    The reason this wouldn't work is that the JavaScript engine interprets this as a function declaration followed by a completely unrelated grouping operator that contains no expression, and grouping operators must contain an expression. According to JavaScript, the above snippet of code is equivalent to the following one.

    function someName() {
        alert(2 + 2);
    }
    
    ();
    

    Another thing I'd like to point out that may be of some use to some people is that any name identifier you provide for a function expression is pretty much useless in the context of the code except from within the function definition itself.

    var a = function b() {
        // do something
    };
    a(); // works
    b(); // doesn't work
    
    var c = function d() {
        window.setTimeout(d, 1000); // works
    };
    

    Of course, using name identifiers with your function definitions is always helpful when it comes to debugging code, but that's something else entirely... :-)

提交回复
热议问题