js闭包用法实例详解

JS闭包用法实例详解

什么是闭包?

闭包是指有权访问另一个函数作用域中变量的函数。创建闭包的常见方式是在一个函数内部创建另一个函数。在创建的内部函数中,可以访问外部函数的参数和变量,即使外部函数已经返回退出。

为什么要使用闭包?

闭包的主要作用是作为函数工厂,可以用来封装变量和方法,使全局变量不被污染。

同时,闭包可以让一个函数访问另一个函数的局部变量,使得这些变量的值即使在外部函数调用结束后仍然能被访问到。

闭包的使用场景

闭包最常见的使用场景是封装变量或函数。通过定义外部函数,在其内部定义内部函数,并在内部函数中引用外部函数定义的变量或函数,从而实现对外部函数变量或函数的保护控制。

例如:

function add() {
  var count = 0;
  function plus() {count += 1;}
  plus();
  return count;
}
add(); // 输出 1
add(); // 输出 1

在这个例子中,存储变量 count 的作用域被限制在 add() 函数内。 plus() 函数就是一个闭包,它可以访问 add() 函数内的变量 count。每一次执行 plus() 函数都会对 count 变量进行递增操作。因此,第一次执行 add() 函数时返回值为 1,第二次执行时返回值为 1,这说明内部变量 count 的值已经得到了保留,而闭包则对 count 变量的保护作用达到了目的。

闭包用法实例

实例1:计数器

function createCounter() {
  var counter = 0;
  function inner() {
    return ++counter;
  }
  return inner;
}

var getCount = createCounter();
console.log(getCount());  // 输出1
console.log(getCount());  // 输出2
console.log(getCount());  // 输出3

在这个例子中,createCounter 函数创建了一个闭包,并返回内部函数inner。内部变量 counter 被一直保留下来,并且每次调用 inner() 函数时,变量 counter 都会增加。这就实现了一个简单的计数器,每次调用 getCount() 函数都会返回递增的计数值。

实例2:缓存

function createCache() {
  var cache = {};
  function get(key) {
    return cache[key];
  }
  function set(key, value) {
    cache[key] = value;
  }
  return {
    get: get,
    set: set
  };
}

var cache = createCache();
cache.set('name', 'Jack');
cache.set('age', 20);
console.log(cache.get('name'));   // 输出 Jack
console.log(cache.get('age'));    // 输出 20
console.log(cache.get('gender')); // 输出 undefined

在这个例子中,createCache 函数同样创建了一个闭包,并返回了内部函数组成的对象。该对象包含了两个方法: get()set()get() 函数通过传入的 key 参数返回对应的缓存值; set() 函数则将 value 值存入 cache 对象的 key 属性中。

整个缓存过程的实现都在闭包内完成, cache 对象的作用域被限制在闭包内。由于闭包的保护作用, cache 对象不会被外部访问到,因此实现了一个简单的缓存框架。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js闭包用法实例详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • javascript 操作文件 实现方法小结

    Javascript 操作文件 实现方法小结 在Javascript中,操作文件的方法主要是使用File API和XMLHttpRequest对象的responseText、responseXML属性。 File API 1. 读取文件内容 使用File API的读取文件内容主要有以下几个步骤: 创建一个FileReader对象 调用FileReader对象…

    JavaScript 2023年5月27日
    00
  • 浅谈JS正则表达式的RegExp对象和括号的使用

    浅谈JS正则表达式的RegExp对象和括号的使用 正则表达式是一种用来精确匹配字符串的工具,而JavaScript中的RegExp对象可以帮助我们在代码中使用正则表达式。 RegExp对象 在JavaScript中,RegExp对象可以通过构造函数创建: // 创建正则表达式 const regex = new RegExp(‘ab+c’); // 或者 c…

    JavaScript 2023年6月10日
    00
  • textContent在Firefox下与innerText等效的属性

    首先,需要解释一下 textContent 和 innerText 之间的区别。textContent 会将元素中的所有文本内容包括标签都作为一个字符串返回,而 innerText 只能获得元素中可视的文本内容,同时将元素中的标签和换行符剔除掉。在大多数情况下,textContent 更加常用,因为它能够对元素中所有的文本内容进行精确的处理。 但在 Fire…

    JavaScript 2023年6月11日
    00
  • JS 遍历 json 和 JQuery 遍历json操作完整示例

    下面为你详细讲解JS遍历JSON和jQuery遍历JSON操作的完整攻略。 JS 遍历 JSON 1. 遍历JSON方法 遍历JSON有两种方法:for…in 和 Object.keys()。 2. for…in 遍历JSON for…in 循环可以用于遍历 JSON 对象以及数组: const myObj = { name: "Joh…

    JavaScript 2023年5月27日
    00
  • javascript实现文字无缝滚动效果

    当我们需要在网页中展示一些较长的文字或新闻时,在有限的空间内显示全部内容是不现实的。这时,我们可以使用文字无缝滚动效果,将文字平滑滚动,以便在有限的空间内展示全部的内容。下面是javascript实现文字无缝滚动效果的完整攻略。 实现思路 首先,在HTML中创建一个容器,用来放置要滚动的文字。 使用CSS为容器设置样式,包括宽度、高度、背景色等,以及设置文字…

    JavaScript 2023年6月11日
    00
  • JavaScript日期时间与时间戳的转换函数分享

    JavaScript日期时间与时间戳的转换函数分享 介绍 在JavaScript编程中,我们经常需要进行日期与时间戳之间的转换。日期(Date)是指年、月、日、时、分、秒等信息的组合,而时间戳(TimeStamp)则是指从某个固定时间点(如1970年1月1日00:00:00 UTC)开始计算的秒数或毫秒数。在JavaScript中,我们可以通过内置的Date…

    JavaScript 2023年5月27日
    00
  • Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统

    Bootstrap栅格系统是Bootstrap框架的一个重要组成部分,它可以帮助我们实现页面的自适应效果,让同一份代码在不同尺寸的设备上都能够呈现出良好的显示效果。下面是Bootstrap栅格系统的完整攻略: 什么是Bootstrap栅格系统 Bootstrap栅格系统由一系列的栅格列组成,每个栅格列的宽度是固定的,可以根据设备的屏幕尺寸进行自动调整。Boo…

    JavaScript 2023年6月1日
    00
  • 详谈js遍历集合(Array,Map,Set)

    我来为你讲解如何用JavaScript遍历集合。 集合的遍历 在遍历集合之前,首先需要了解集合类型的基本特性。 JavaScript中常见的集合类型有Array、Map和Set。其中: Array是一种有序、可重复的数据集合,它可以通过下标或迭代器来访问其中的元素。 Map是一种关联数组,它保存了键值对,并且键可以是任意类型的数据,而值可以是任意类型的数据。…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部