I\'am studying the behaviour of Immediatly Invoked Function Expressions (IIFE) and while doing that I encounterd the following situation.
(function () {
You can write a IIFE also like that: (function () {})()
By omitting the semicolon, your first codesnippet actually calls the first function with the second IIFE handed over as parameter for the first.
executing as parameter for the first IIFE
\/
(function () {document.write("bar");})( (function () {document.write("foo");}());)
which first prints foo and then bar unlike:
(function () {
document.write("bar");
})();
(function () {
document.write("foo");
}());
which prints barfoo or
(function () {
document.write("bar");
});
(function () {
document.write("foo");
}());
where the first now is solely considered as grouping operator.