I did small research regarding how the IIFE works. And stumble upon with one behavior, which I beilive related to ASI mechanism. Here is code examples which are quite self explanatory.
This block will executed successfully:
!function (){}()
^function (){}()
This not:
^function (){}()
!function (){}()
As substiturions for ! sign you may use +, - and ~. Replacements for ^ might be &, *, ,.
Could anyone give better explanation than I ended up with "this is how ASI works in JavaScript."? Which might be totally wrong, I have to admit.