美文网首页
闭包是什么?

闭包是什么?

作者: charllote8 | 来源:发表于2018-01-04 20:20 被阅读0次

学习前端的童鞋,通常会听到闭包这个名词,不了解的童鞋会觉得这货真高大上。实际上 闭包并没有这么高深莫测,小白也可以理解,这篇blog就以我一个前端小白的视角来解读一下什么是闭包?闭包的用处是什么?
在MDN上,闭包的释义是【闭包是一个函数和声明该函数的词法环境的组合】。小白说我看不懂啊 ,没错,所以上代码:

function init() {
    let name = "Mozilla"; 
    // name 是一个被init创建的局部变量
    function displayName() { 
    // displayName() 是一个内部函数,
        console.log(`name = ${name}`); 
        //  一个闭包使用在父函数中声明的变量
    } 
    displayName();
}
init();

在代码中,displayName这个函数调用了init函数中的局部变量name,displayName本身并没有声明过name这个变量,而是直接调用了自己外部的变量。
总结来说,闭包可以理解为函数与函数可以访问的到变量的组合。
那么闭包到底有什么用呢?
闭包常常用来间接访问一个变量。还是回到刚才那段代码;
displayName直接调用了外部变量name,这是由js作用域造成的,并不是我们故意使用闭包,而是我们在日常写代码中经常书写了满足闭包定义的代码,并且这样方便使用。

闭包还可以用来模拟类似java中的私有函数

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 */

这段代码里Counter创建了一个私有变量privateCounter,一个私有函数changeBy,调用这两个私有项只能通过调用Counter.increment,Counter.decrement 和 Counter.value三个函数来实现,外部的其他函数不能使用。

以上是我对闭包的理解,如果有错误 欢迎指出~

相关文章

  • Python闭包与几种装饰器浅析

    闭包 闭包是什么?闭包可以保存外部函数的变量,可以增加代码的复用性,那具体闭包的构成是什么? 1. 闭包构成条件 ...

  • 前端常见问题总结

    什么是闭包?闭包的用途是什么?闭包的缺点是什么? 什么是闭包 闭包:内部函数总是可以访问其所在的外部函数中声明的参...

  • 闭包、call-apply-bind 的用法 、HTTP状态码

    一、什么是闭包?闭包的用途是什么?闭包的缺点是什么? 答 :1、什么是闭包:如果一个函数用到了外部的变量,那么这个...

  • 闭包,call、apply、bind 的用法,HTTP 状态码

    什么是闭包?闭包的用途是什么?闭包的缺点是什么?• 闭包:如果一个函数用到了外部的变量,那么这个函数加这个变量就叫...

  • 闭包的总结

    围绕:闭包是什么?闭包的用途有哪些?闭包的缺点是什么? 这三个问题来进行总结 一、何为闭包?如果一个函数用到了外部...

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • web前端必知篇:闭包的理解

    闭包这玩意,在面试的时候经常被问到。如果你还不了解,小编就简单的讲解一下! 闭包是什么,闭包的优点是什么? 闭包就...

  • 闭包是什么

    闭包是什么? 闭包是一个函数 闭包可以使用在它外面定义的变量 闭包存在定义该变量的作用域中 各种专业文献上的"闭包...

  • JavaScript 中 闭包 的详解

    闭包是什么 在 JavaScript 中,闭包是一个让人很难弄懂的概念。ECMAScript 中给闭包的定义是:闭...

  • JavaScript 中的闭包

    闭包是什么 在 JavaScript 中,闭包是一个让人很难弄懂的概念。ECMAScript 中给闭包的定义是:闭...

网友评论

      本文标题:闭包是什么?

      本文链接:https://www.haomeiwen.com/subject/agirnxtx.html