~
是 bitwise Not。放在 function 前会改变整个 statement 的优先级。一般,这个 function() {} 要马上 call 一下的话(这是个 closure),是这样做的:
(function() {
})();
前面用上 ~ 后,() 的优先级降低,效果是等同的。
另外一种常见的作法是用 !,如:
!function() {
// here we go
} ();
Update:
上述表述并不正确,请参见一楼的说明。这里并不是优先级的原因;而是看 function 前有没有其他操作符,如果有,它是一个表达式并马上被调用,如果没有则被当成一个函数声明,在后面再跟 () 的话其实会报错。
再加个例子:
1 + function() { console.log("run"); } (); // 会正确输出 log "run"
function() { console.log("run"); } () + 1; // 报错