立即执行函数

125 阅读1分钟

立即执行函数(immediately-invoked function express),是一种自动执行,执行完立即释放的函数。注意只有表达式才能被执行符号()执行。

将一个函数声明用括号()包裹变成表达式,然后使用执行符号(),可以被立即执行。

(function test(){
    console.log('HelloWorld'); //'HelloWorld'
})();

如果使用函数表达式的形式定义函数,那么在表达式后面接一个执行符号(),就可以被立即执行。

var test = function (){
    console.log('HelloWorld'); //'HelloWorld'
}();

将一个函数声明变成表达式的方法有很多种,比如加一个加号+,减号-,与&&||!,并且变成表达式后函数名会失效。

!function test(){
    console.log(1); // 1
}();

test(); // Uncaught ReferenceError: test is not defined
  • 以下代码中函数声明b,因为变成了表达式,所以函数名失效,所以b变成了undefined
var a = 10;

if(function b(){}){
    a += typeof(b);
}

console.log(a); // 10undefined

如果没有将函数声明变成表达式,却写了执行符号,会报错。

// Uncaught SyntaxError: Unexpected token ')
function test(){
    console.log('HelloWorld');
}()
  • 但是有一个特殊情况,如果执行符号()里传值了,那么就不会报错,但是也不会执行,因为系统会将括号(6)看作是单独的一个表达式,而不是执行符号。
function test(a){
    console.log('HelloWorld');
}(6);

// 相当于以下代码
function test(a){
    console.log('HelloWorld');
};
(6);
  • 如果用一个变量接收,是可以返回一个值的,如果括号()里传递了多个值,逗号运算符,会返回最后的值。
const num1 = (6);
console.log(num); // 6

const num2 = (6, 7, 8);
console.log(num); // 8
var fn = (
    function fn1(){
        return 1;
    },
    function fn2(){
        return '2';
    }
)();

console.log(typeof(fn)); // 'string'