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时,我们可能会遇到一些数据类型转换的问题。这些数据类型转换通常是自动发生的,而且往往只有在出现错误时才会引起我们的注意。本文将介绍哪些情况下会发生数据类型转换,并给出一些例子。 基础数据类型的自动转换 字符串转换 当JavaScript需要处理不同数据类型时,会自动进行类型转换…

    JavaScript 2023年6月10日
    00
  • 一文带你理解JavaScript中的函数式编程

    “一文带你理解JavaScript中的函数式编程”的完整攻略 什么是函数式编程? 函数式编程是一种编程范式,它将计算机程序看作一系列数学函数的组合,避免使用共享状态和可变数据,通过数据不可变和函数无副作用的特性实现函数的组合和复用。JavaScript原生支持函数式编程,在近年来的JavaScript开发中也越来越普遍。 函数式编程的特点 函数是一等公民:函…

    JavaScript 2023年5月27日
    00
  • gulp-htmlmin压缩html的gulp插件实例代码

    下面是“gulp-htmlmin压缩html的gulp插件实例代码”的完整攻略。 什么是gulp-htmlmin gulp-htmlmin 是一个用于压缩 HTML 文件的 Gulp 插件。 安装gulp-htmlmin 在使用 gulp-htmlmin 之前,需要先安装 Gulp 和 gulp-htmlmin,可以使用以下命令安装: npm install…

    JavaScript 2023年6月10日
    00
  • javascript二维数组和对象的深拷贝与浅拷贝实例分析

    JavaScript二维数组和对象的深拷贝与浅拷贝实例分析 概述 在JavaScript中,数组和对象是两个广泛使用的数据结构,它们在实际开发中经常需要进行拷贝操作。拷贝操作没有统一的标准,被分为深拷贝和浅拷贝两种类型。当数组或对象中的元素比较简单时,使用浅拷贝已经能满足需求。但若数组或对象中存在嵌套的元素,使用浅拷贝时会出现意想不到的结果。此时需要使用深拷…

    JavaScript 2023年6月10日
    00
  • 用javascript实现截取字符串包含中文处理的函数

    下面我将详细讲解如何使用 JavaScript 实现截取字符串包含中文处理的函数。 函数实现思路 在 JavaScript 中,一个英文字符和一个中文字符所占用的字节数是不同的。一个英文字符占用 1 个字节,而一个中文字符占用 2 个字节。因此,在截取字符串时,不能直接按照字符个数进行截取,否则会出现截取的字符串超出范围或截取不完整的情况。具体实现思路是使用…

    JavaScript 2023年5月28日
    00
  • 前端设计模式——MVC模式

    MVC模式(Model-View-Controller):是一种前端和后端都广泛应用的设计模式。它将应用程序的业务逻辑、数据表示和用户界面分离,使得开发人员可以独立地修改各部分而不影响其他部分。MVC设计模式有助于提高代码的可读性、可维护性和可重用性。 MVC是Model-View-Controller的缩写,它将一个应用程序分为三个部分: 1. Model…

    JavaScript 2023年4月18日
    00
  • AE CC 2019即将发布 Adobe After Effects CC 2019新功能视频介绍

    AE CC 2019即将发布 Adobe After Effects CC 2019新功能视频介绍 简介 Adobe After Effects CC 2019是一款常用的视频特效处理软件。本文将介绍即将发布的AE CC 2019的新功能,并对其详细进行讲解。 新功能 Content-Aware Fill Content-Aware Fill是AE CC 2…

    JavaScript 2023年5月28日
    00
  • JavaScript获取服务器时间的方法详解

    JavaScript获取服务器时间的方法详解 在Web开发中,有时需要获取服务器的时间,在前端使用JavaScript编写代码时,通常会用到一些方法来获取该时间。本文将会介绍获取服务器时间的常用方法,供前端开发者参考和使用。 1. 使用XMLHttpRequest对象获取服务器时间 XMLHttpRequest可以通过异步的方式请求服务器上的一个文本文件,该…

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