Importance of using ! in this code
var testValue;
!function test() { testValue = 3; }();
console.log(testValue);
Importance of using ! in this code
var testValue;
!function test() { testValue = 3; }();
console.log(testValue);
 
    
    The ! indicates to the interpreter to parse what follows as an expression rather than as what would otherwise be a function declaration. Function declarations can't be invoked on the same line, so without the !, a SyntaxError would be thrown:
var testValue;
function test() { testValue = 3; }();
console.log(testValue);Only function expressions can be immediately invoked. Though, to indicate a function expression, it would probably be clearer to use parentheses around the function rather than !, and there isn't all that much point to naming the function test if the function name isn't used anywhere, eg:
var testValue;
(() => {
  testValue = 3;
})();
console.log(testValue); 
    
    Functions are not automatically objects. You should define it inside brackets or assign it to a variable. If you use ! for function definition. It means !(function(){console.log("hi");}) Now you can insert () to run that function.
