Skip to content

JS 闭包

Published: at 11:18 PMSuggest Changes

复习一下 JS 闭包

什么是闭包

MDN - 闭包

一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。

大佬回答是:高程 4 上是,一个函数可以访问外部函数的变量和参数

例子

常见的例子

function makeFunc() {
    var name = "Mozilla";
    function displayName() {
        alert(name);
    }
    return displayName;
}

var myFunc = makeFunc();
myFunc();

更有意思的例子

function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12

闭包模拟私有变量

var Counter = (function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  }
})();

console.log(Counter.value()); /* logs 0 */
Counter.increment();
Counter.increment();
console.log(Counter.value()); /* logs 2 */
Counter.decrement();
console.log(Counter.value()); /* logs 1 */

大佬提问

微信群 - 200 : 你在哪里用到了闭包? 微信群 - bug : 闭包具体有什么用处? 微信群 - 翔子_alias : 什么是引用?

react hooks 算一种闭包吧 是个函数就是闭包 模块化 私有变量 模拟私有方法吧 闭包就是让函数内部访问外部变量用的吧? 引用?引用应该就是外部的变量这些吧?

那么。。。

高阶函数是闭包吗?

高阶函数是指至少满足下列条件之一的函数。

函数可以作为参数被传递; 函数可以作为返回值输出。 JavaScript 语言中的函数显然满足高阶函数的条件,在实际开发中,无论是将函数当作参数 传递,还是让函数的执行结果返回另外一个函数,这两种情形都有很多应用场景,下面就列举一 些高阶函数的应用场景。

https://segmentfault.com/a/1190000017569569

先随手记一下,明天问问


Previous Post
JS 基础复习笔记(面试用)
Next Post
TSLint 忽略特定行