「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。
    闭包的作用是间接访问一个变量或隐藏变量,如果使用全局变量,则有被篡改的风险

    1. function fn(){
    2. let name = 'jack'
    3. return function(){
    4. console.log(name)
    5. }
    6. }
    7. let fn2 = fn()
    8. fn2()

    闭包的缺点是消耗内存,影响页面性能

    声明一个匿名函数并立即执行,即立即执行函数IIFE(Immediately Invoked Function Expression)
    立即执行函数的作用是创建独立的作用域(私有变量)
    一个例子:为了不打印出5个6,需创造局部变量,用立即执行函数和let都可以实现

    1. for (var i = 1; i < 6; i++){
    2. !function(j){
    3. setTimeout(()=>console.log(j), 0)
    4. }(i)
    5. }

    常用的创建立即执行函数的方法

    1. // 创建 IIFE 的方法
    2. (function() {
    3. alert("Parentheses around the function");
    4. })();
    5. (function() {
    6. alert("Parentheses around the whole thing");
    7. }());
    8. !function() {
    9. alert("Bitwise NOT operator starts the expression");
    10. }();
    11. +function() {
    12. alert("Unary plus starts the expression");
    13. }();