ES5中的立即执行函数:IIFE
立即执行函数的一大作用是方便的创建私有变量,以免污染全局变量,虽然在ES6的let和const出来之后已经不需要如此麻烦的去用这种方法来创建私有变量,但是在这个ES5和ES6同时存在的时代,我们还是有必要去学习一下IIFE。
我们知道,在js这门语言中,调用一个函数最小白的方法是方法名后加上括号,如foo(),那么如果这是个匿名函数呢?我们要怎么调用它呢?
一个方法是将匿名函数的指针指向一个变量,如:
var foo = function() {}
然后再用foo()形式进行调用。那么如果我们没有定义一个变量来储存匿名函数的地址呢?这里就可以用到立即执行函数:用括号将函数声明包起来,使之成为函数表达式,再进行调用。
立即执行函数的几种形式:
1. 针对具名函数
(function foo() {
console.log(1111)
})() //打印出1111
或者:
(function foo() {
console.log(1111)
}()) //打印出1111
就是说最后的括号可以放在前面一个括号的里面,也可以放在它的外面。
2. 针对匿名函数(与具名函数一样)
(function() {
console.log(1111)
}()) //打印出1111
或者
(function() {
console.log(1111)
})() //打印出1111
同样的,最后的括号可以放在前面一个括号的里面,也可以放在它的外面。
就是说立即执行函数可以针对具名函数和匿名函数使用。
当然:我们也可以从外面传一个变量进去这个局部作用域,如jQuery的扩展实现
(function($) {
$.fn.myPlugin = function() {
console.log(111111)
}
})(jQuery)
这样可以避免局部作用域中的$由于库的冲突造成的不准确。