立即执行函数

简介: 立即执行函数

一、前言

我们知道在原生JavaScript中只有全局作用域和函数作用域,公有变量很容易造成污染。

为了解决这个问题,必须要对作用域进行隔离,这个时候就想到了立即执行函数。

二、立即执行函数(IIFE)

立即执行函数会创建一个独立的作用域,这个作用域里的变量外部无法访问,其变量用完就释放,能够减小内存的压力。

1. 特点

  1. 只有函数表达式可以,函数声明不可以
  2. 函数表达式中的名字不会放在GO或者AO中

2. 常见形式

var f1 = (function(name) {
    console.log(name);
})('Mike'); // 'Mike'
var f2 = (function(name) {
    console.log(name);
}('Nancy')); // 'Nancy'
var f3 = function(name) {
    console.log(name);
}('Lucy'); // 'Lucy'

注意:这里推荐使用第一种写法。

3. 其他形式

!function(){console.log(1);}(); // 1
+function(){console.log(2);}(); // 2
-function(){console.log(3);}(); // 3
~function(){console.log(4);}(); // 4
void function(){console.log(5);}(); // 5
new function(){console.log(6);}(); // 6


三、案例

// 点击li标签打印其下标
window.onload = function() {
    for(var i = 1; i <= 6; i++) {
        var body = document.getElementsByTagName('body')[0];
        var li = document.createElement('li');
        li.innerHTML = i;
        body.append(li);
    }
    var liArr = document.getElementsByTagName('li');
    console.log(liArr);
    for(var i = 0; i < 6; i++) {
        liArr[i].onclick = function() {
            console.log(i); // 每一个节点元素都打印 6
        }
    }
}
// 使用立即执行函数创建独立的作用域
// 解决公有变量污染问题
window.onload = function() {
    for(var i = 1; i <= 6; i++) {
        var body = document.getElementsByTagName('body')[0];
        var li = document.createElement('li');
        li.innerHTML = i;
        body.append(li);
    }
    var liArr = document.getElementsByTagName('li');
    console.log(liArr);
    for(var i = 0; i < liArr.length; i++) {
        (function(n) {
            liArr[n].onclick = function() {
                console.log(n); // 0 1 2 3 4 5
            };
        })(i);
    }
}

四、本节思维导图

1688211022499.png

目录
相关文章
|
27天前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
3月前
|
JavaScript 前端开发
IIFE(立即执行函数表达式)
IIFE(立即执行函数表达式)
39 1
|
自然语言处理 JavaScript 前端开发
深入理解立即执行函数
深入理解立即执行函数
|
C#
C#匿名函数
C#匿名函数
90 0
|
JavaScript 前端开发
Day11-闭包应用 - 立即执行函数IIFE
Day11-闭包应用 - 立即执行函数IIFE
111 0
|
JavaScript 前端开发 对象存储
函数表达式 与 函数声明 别搞混了
函数表达式 与 函数声明 别搞混了
|
编译器
第4章变量提升和函数的提升
第4章变量提升和函数的提升
匿名函数和闭包
首先,一个函数不管是不是匿名函数,和闭包之间根本没有任何关系! 所谓闭包究竟是什么?网络上说法云里雾里,讲得高深莫测,但是其实只要稍微有一些编译器实现机制的认识,就会知道闭包其实是非常简单的东西。 我们先来看看下面的代码: function funcA() {     var a = 1, b = 2;     return funcB();           fun
1495 0
javascrpt绑定事件之匿名函数
经常听到有人说,匿名函数绑定事件不好控制啊,无法解除绑定啊等等等等,一直很奇怪谁说的不能解除绑定。 下面来实现click事件2次后,自动解除绑定。 看代码: var dom=document.getElementById("test"),clickt=0; dom.addEventListener("click",function(e){ clickt++; alert('你摸了我'+clickt+'下了。
708 0