colindcli / CodeGit

代码仓库
https://colindcli.github.io/CodeGit/
MIT License
0 stars 2 forks source link

JS 闭包 #16

Closed colindcli closed 7 years ago

colindcli commented 7 years ago
function f1() {
    var i = 0;
    var f2 = function () { console.log(++i); };
    return f2;
}
var f = f1();
f();

作用

  1. 一个是前面提到的可以读取函数内部的变量
  2. 另一个就是让这些变量的值始终保持在内存中

原理 f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

注意

  1. 闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包
  2. 闭包会在父函数外部,改变父函数内部变量的值