可用方式
-
(function($) {})(jQuery); -
!function( $ ){}(jQuery); -
+function( $ ){}(jQuery); -
-function( $ ){}(jQuery); -
~function( $ ){}(jQuery);
更多方式参考http://swordair.com/function-and-exclamation-mark/
本质解释
function() {}()这么写会报错,因为这是一个函数定义:
修正1:(多了一对括号),调用匿名函数:(function() {})()。
修正2: 在前面加上一个布尔运算符(只多了一个感叹号),就是表达式了,将执行后面的代码,也就合法实现调用!function() {}()。
使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。任何何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。
而 !, +, -,||都有这样的功能。
函数(声明和表达式)个人常用函数声明,因为放在调用的上面还是下面都不出错
函数声明不仅会提升声明,还会提升定义
fun() // 调用成功
function fun() {}
函数表达式只会提升声明,不会提升定义
fun() // 有foo这个变量,但它却不是函数,所以调用失败
var fun = function() {}
变量提升
不论函数的表达式还是声明,都是变量(函数字面量),变量(声明)提升