函数立即执行
IIFE(Immediately Invoked Function Expression)函数在定义的时候直接执行
如果我们这么写,js解释器会报错
function foo(){
console.log('foo');
}();
函数在定义的时候直接执行的写法有很多,较为常见的是下面5种写法
foo4的写法最为严谨,前面的分号可以认为是防御型分号,防止前面的语句不写分号导致解析错误
foo5的写法是为了接收返回值的场景
function foo1() {
console.log('foo1');
}
foo1();
(function foo2() {
console.log('foo2');
}());
(function foo3() {
console.log('foo3');
})();
;(function foo4() {
console.log('foo4');
})();
var foo5_return = function foo5() {
console.log('foo5');
return 'foo5_return';
}();
console.log(foo5_return);
其他不常用的写法,简单了解下就行,如下:
!function foo6() {
console.log('foo6');
}();
+function foo7() {
console.log('foo7');
}();
-function foo8() {
console.log('foo8');
}();
~function foo9() {
console.log('foo9');
}();
void function foo10() {
console.log('foo10');
}();
true && function foo11() {
console.log('foo11');
}();
0, function foo12() {
console.log('foo12');
}();
jQuery中的$符号是如何实现的
(function ($) {
console.log('jquery的$是这么实现的' + $);
})('jquery object');