函数立即执行

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');

results matching ""

    No results matching ""