什么是立即执行函数?
JavaScript立即执行函数可以让你的函数在创建后立即执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行。
( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法
为什么要有立即执行函数?(优点)
1. 不必为函数命名,避免了污染全局变量
2. IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
首先我们先从IIFE的运行原理说起。
立即执行函数的原理以及书写方式 !!!
在讲立即函数的原理之前,我们得先知道如何声明一个函数 !!!
- 函数声明:
1. 字面量形式
function fn() {
console.log("123");
}
2. 匿名函数表达式
var fn = function () {
console.log("123");
}
方式一
(function () { // open IIFE
// inside IIFE
}()); // close IIFE
方式二
(function () { // open IIFE
// inside IIFE
})(); // close IIFE
写到这里有人可能会问,为什么不能够这样子写呢?
function () { // open IIFE
// inside IIFE
}(); // close IIFE
当这样子写了以后,JavaScript执行引擎会报这样一个错误!!!
Uncaught SyntaxError: Unexpected token (
这又是为什么呢?
产生这个错误的原因是,Javascript执行引擎看到function关键字之后,认为后面跟的是函数声明语句,不应该以圆括号结尾。所以报出这样的错误。
那又该如何解决呢?,下面就是IIFE的运行原理
我们现在就是要让Javascript执行引擎知道,圆括号前面的部分不是函数定义语句,而是一个表达式,可以对此进行运算。
这也就解释了为什么前面加上一对圆括号就可以了。
这种情况下Javascript引擎就会认为这是一个表达式,而不是函数声明,当然要让Javascript引擎认为这是一个表达式的方法还有很多:
比如 一些常用的运算符:+ - ! …等等,这样Javascript引擎就会认为这是一个表达式,
而不是函数声明,就不会报出上面的错误了。当然用的最多的还是上面的方式,不会有歧义!!!
如有错误,欢迎指正,希望这篇文章能够对你有所帮助 !!!