js闭包用法实例详解

yizhihongxing

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日

相关文章

  • 详解ASP.NET Core MVC四种枚举绑定方式

    接下来我会详细讲解ASP.NET Core MVC四种枚举绑定方式的完整攻略。 ASP.NET Core MVC四种枚举绑定方式 在ASP.NET Core MVC中,我们可以使用四种方式来绑定枚举类型的值。以下是介绍这些方式的详细说明。 1. 基于字符串的方式:BindAttribute 在控制器中处理POST请求时,如果我们需要绑定到枚举类型的值,可以使…

    JavaScript 2023年6月11日
    00
  • JavaScript实现的XML与JSON互转功能详解

    JavaScript实现的XML与JSON互转功能详解 近年来,JSON已经成为了web开发中常用的数据格式,而XML在一些特定领域也有着广泛应用。在web开发中,我们有时需要将XML数据转换为JSON格式,或者将JSON格式转换为XML数据,这就需要用到JavaScript实现的XML和JSON互转功能。 什么是XML XML是可扩展标记语言(Extens…

    JavaScript 2023年5月27日
    00
  • Javascript图像处理—为矩阵添加常用方法

    Javascript 图像处理 – 为矩阵添加常用方法 前言 在图像处理中,矩阵是重要的数据结构。Javascript 作为一门强大的编程语言,可以非常方便地完成矩阵的各种操作。在本篇文章中,我们将讲解为矩阵添加一些常用方法的过程,以便于以后的图像处理中使用。 实现常用矩阵方法 为了方便起见,我们在这里定义一个矩阵的类: class Matrix { con…

    JavaScript 2023年6月11日
    00
  • 关于js里的this关键字的理解

    关于JS中的this关键字 在JavaScript中,this关键字是一个非常重要的概念,有着不同的用法和含义。在不同的情况下它所代表的对象也不同,因此理解this的含义和使用场景显得非常重要。 this的指向 在JavaScript中,this表示当前函数的执行上下文。根据函数的调用方式不同,this指向的对象也不同。 通常来说,this的指向可以分为以下…

    JavaScript 2023年6月10日
    00
  • 解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法

    当我们使用JS的setTimeout函数在火狐浏览器下出现不兼容失效不执行的问题时,可以使用以下两种方法进行解决: 方法一:使用匿名函数替代字符串函数 在setTimeout函数中传入的字符串函数在Chrome和其他浏览器中可以正常执行,但是在火狐浏览器中则可能因为严格模式下的限制而不能正常工作。 // 无法在火狐浏览器中正常执行 setTimeout(‘a…

    JavaScript 2023年6月11日
    00
  • 验证用户必选CheckBox控件与自定义验证javascript代码

    验证用户必选CheckBox控件与自定义验证javascript代码是网站开发过程中一个很重要的环节,可以有效地提高网站的安全性和用户体验。本文将详细讲解该过程的完整攻略。 一、HTML中定义CheckBox控件 在HTML页面中,我们可以使用<input type=”checkbox”>标签来定义一个CheckBox控件。要实现用户必选的功能,…

    JavaScript 2023年6月10日
    00
  • JavaScript中ahooks 处理 DOM 的方法

    下面是详细讲解 JavaScript 中 ahooks 处理 DOM 的方法的攻略: 简介 ahooks 是经过封装的钩子库,在 React 开发中经常会使用到。其中包含了一些与 DOM 有关的操作,比如 useClickAway 可以监听用户在页面其他区域的点击事件等。在 ahooks 中使用这些钩子能够更加方便地进行 DOM 操作。 安装 在命令行中输入…

    JavaScript 2023年6月10日
    00
  • JS正则RegExp.test()使用注意事项(不具有重复性)

    JS正则RegExp.test()使用注意事项(不具有重复性) 在JavaScript中,正则表达式是一种强大的工具,可以用来搜索和替换字符文本。其中,RegExp对象是正则表达式的对象表示法,它提供了很多方法来操作字符串。其中之一便是test()方法。 RegExp.test()方法简介 RegExp.test()方法是一个正则表达式对象的方法,它用来检查…

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