在了解立即执行函数之前,应该需要了解几个关于函数的概念。1:函数声明;2:函数表达式;3:匿名函数。
function testA(){
};此为函数声明;
var testA = function (){
};用定义变量的写法来写,这句话意思是定义一个函数,赋值于testA,这叫函数表达式;
function (){
};声明了函数,但是没有取名,此为匿名函数。
现在回到立即执行函数的概念。
立即执行函数常见两种写法:
1: (function (){
}() );
2:(function (){
} )();
两种中写法中()的作用就是立即执行符号,通过这个联想到正常写法和立即执行函数写法的区别。
因为javascript会对你写的函数模块进行预编译过程,如果写的是正常的函数声明,在当前环境下,此函数会被整体提升,而函数表达式属于赋值于变量,变量在这个预编译过程中仅仅变量名提升,后面的值不会提升,只有等待代码一行一行解析到它,这是函数表达式和函数函数声明的不同。
更重要的一点,函数声明只能通过函数名调用,而函数表达式可以通过后面加()立即执行此函数。
1:var a = function(){
console.log(‘abc’)
};
2:var a = function(){
console.log(‘abc’)
}();
以上两种写法中1仅仅给变量a赋值,赋予了一个函数表达式,且此函数表达式未被执行;2中在函数结尾加了执行符号,则此函数表达式立即执行,且所有能被执行符号执行的表达式,就放弃了这个函数了,是无法通过函数名调用内容的,例如上述例子中,如若给函数定义一个名称,且加了执行符号,会打印出abc,但是无法通过这个名称来执行函数了。