编写一个可以执行如下操作的函数。

var addSix = createBase(6);
addSix(10); // 返回 16
addSix(21); // 返回 27

可以创建一个闭包来存放传递给函数 createBase 的值。被返回的内部函数是在外部函数中创建的,内部函数就成了一个闭包,它可以访问外部函数中的变量,在本例中是变量 baseNumber。

function createBase(baseNumber) {
  return function(N) {
    // 我们在这里访问 baseNumber,即使它是在这个函数之外声明的。
    // JavaScript 中的闭包允许我们这么做。
    return baseNumber + N;
  }
}
var addSix = createBase(6);
addSix(10);
addSix(21);

⭐ 那些操作会造成内存泄漏?

⭐ 闭包里面的变量为什么不会被垃圾回收 ?

首先我们来了解下什么是垃圾回收 ?

在 js 中所谓的垃圾就是指不会再被使用的值,就会被当成垃圾回收掉。

引用计数有一个很大的坑,就是循环引用时,会造成内存永远无法释放。

为什么闭包中的变量不会被垃圾回收 ?

这里我们要明确一个点,如果闭包函数的引用计数为 0 时,函数就会释放,它引用的变量也会被释放。