立即执行函数(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'