立即执行函数

64 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

add(1, 2);
function add(a, b) {
    console.log(a + b)
}
// 这个函数只执行一次,手动执行,没有释放

我们的目的 -> 自动执行,执行完成以后立即释放

立即执行函数 -> 初始化函数,声明一个函数,并马上调用这个匿名函数就叫做立即执行函数;也可以说立即执行函数是一种语法,让你的函数在定义以后立即执行;

两种语法

(function() {

})();
(function () {

}());//w3c建议

立即函数的注意事项

(function test() {
    var a = 1;
        b = 2;
    console.log(a + b)
}()); 

test写他和不写他,最后的结果是一样的,我们找test的时候是找不到的

af8fb24953180ac0583ce78ccfcc4b2.png

立即函数可以传参数

(function(j,形参){
//代码中可以使用j
})(实参)

//如果立即执行函数中需要全局变量,全局变量会被作为一个参数传递给立即执行函数(上例中的i就是一个全局变量,i代表的是实参,j是i在立即执行函数中的形参

像其他函数一样,立即执行函数也可以有返回值。除了可以返回基本类型值以外,立即执行函数也能返回任何类型的值,比如对象,函数。

//定义一个num,接受立即函数的返回值
var num = (function (a, b) {
    return a + b
}(2, 4)); 

函数声明变成表达式的方法 + - ! || &&

! function test() {
    console.log(1)
}();
//像 || 或者 && 前面需要加一些东西
0 || function test() {
    console.log(1)
}();
undefined || function test() {
    console.log(1)
}();
1 && function test() {
    console.log(1)
}();

立即函数的作用

  • 不必为函数命名,避免了污染全局变量
  • 立即执行函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量
  • 立即执行函数会形成一个单独的作用域,我们可以封装一些临时变量或者局部变量,避免污染全局变量