可用方式
-
(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() {}
变量提升
不论函数的表达式还是声明,都是变量(函数字面量),变量(声明)提升