Why is this grouping operator + function immediately invoked

后端 未结 3 639
自闭症患者
自闭症患者 2020-12-16 18:57

I\'am studying the behaviour of Immediatly Invoked Function Expressions (IIFE) and while doing that I encounterd the following situation.

(function () {
             


        
3条回答
  •  北海茫月
    2020-12-16 19:52

    As Felix Kling correctly noted: the missing semicolon causes the parentheses around the second IIFE to be interpreted as a function call rather than just grouping the function expression. It becomes much more clear without the newlines:

    (function () {
        document.write("bar");
    })(function () {
        document.write("foo");
    }());
    

    Or with some realignment:

    (function () {
        document.write("bar");
    })(
        function () {
            document.write("foo");
        }()
    );
    

    The first function expression is called with the result of the second function expression as its first and only argument. You should also note that foobar is written rather than barfoo, as the second function is called first and its result is passed as an argument to the first function.

提交回复
热议问题