ES5中的立即执行函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_38102188/article/details/82183616

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)

这样可以避免局部作用域中的$由于库的冲突造成的不准确。

猜你喜欢

转载自blog.csdn.net/m0_38102188/article/details/82183616