参考博客:https://www.cnblogs.com/cnfxx/p/7337889.html
立即执行函数的好处在于隔离作用域,任何一个第三方库都会存在大量的变量和函数,为了避免变量污染(命名冲突),开发者们想到的解决办法就是使用立即执行函数。
1.什么是立即执行函数(IIFE)
在了解立即执行函数之前先明确一下函数声明、函数表达式及匿名函数的形式,如下图:
接下来看立即执行函数的两种常见形式:( function(){…} )()和( function (){…} () ),一个是一个匿名函数包裹在一个括号运算符中,后面再跟一个小括号,另一个是一个匿名函数后面跟一个小括号,然后整个包裹在一个括号运算符中,这两种写法是等价的。要想立即执行函数能做到立即执行,要注意两点,一是函数体后面要有小括号(),二是函数体必须是函数表达式而不能是函数声明。先看下图:
从图中可以看出,除了使用()运算符之外,!,+,-,=等运算符都能起到立即执行的作用。这些运算符的作用就是将匿名函数或函数声明转换为函数表达式,如下图所示,函数体是函数声明的形式,使用运算符将其转换为函数表达式之后就可达到立即执行效果:
大家要注意一下,像下面这个函数,大家认为会执行还是报错还是正常输出:
function test(a,b,c,d){
console.log(a+b+c+d);
}(a+b+c+d);
这样既不报错也不执行。
浏览器会这么认为
function test(a,b,c,d){
console.log(a+b+c+d);
}
(a+b+c+d);
把test函数和括号分开,上面是一个函数定义,下面就是一个表达式。