JavaScript 面向对象学习笔记 -- 闭包

时间:2022-10-11 11:10:16

闭包

全局变量在函数内部可以访问。

var n = 999;
function f1() {
    console.log(n);
}
f1(); // 999

函数内部定义的变量,外部无法访问。

function f1() {
    var n = 999;
}
f1();
console.log(n); // 报错

外部访问函数内定义的变量。在函数里再定义一个函数。

function f1() {
    var i = 0;
    function f2() {
        console.log(i)
    }
    return f2;
}
f1()(); // 0

特点:f2在f1里面定义的,f1需要返回f2

用途:1. 读取函数内部的变量; 2. 让变量保留在内存中。

function f1() {
    var n = 1;
    nAdd = function() {
        n = n + 1;
    }
    function f2() {
        console.log(n);
    }
    return f2;
}
f1()(); // 1
nAdd();
f1()(); // 2

 

优缺点:

优点:

  • 有利于封装
  • 可以访问局部变量

缺点:

  • 内存占用严重,引起内存泄漏