js闭包实例汇总

JS闭包实例汇总

在 JavaScript 中,函数是一等公民,它们可以被传递、被赋值、被嵌套定义等等。在函数内定义的函数,被称为闭包(Closure)。闭包可以访问函数外部的变量,而且在函数执行完并返回时,可以保留这些变量的值。

本文将为大家汇总几个 JavaScript 闭包的实例,方便大家加深对闭包的理解。

示例一:计数器

我们可以通过闭包来创建一个计数器,实现每次调用函数计数器加1的效果。代码如下:

function counter() {
  let count = 0;
  return function() {
    count++;
    console.log(count);
  };
}

const count1 = counter();
const count2 = counter();

count1();
count1();
// 输出:1, 2

count2();
// 输出:1

代码中的 counter 函数返回了一个内部定义的匿名函数,这个匿名函数引用了 counter 函数中的 count 变量。每次调用 counter 函数,都会创建一个新的闭包,因此 count 变量可以被独立地存储在不同闭包中。所以 count1count2 的调用是互不影响的。

示例二:模拟私有变量

在 JavaScript 中,并没有类似 Java 或 C++ 中的私有变量的概念,但是,通过闭包来实现封装变量的访问权限,可以达到类似的效果。代码如下:

function person(name) {
  let _age = 16;

  return {
    getName() {
      return name;
    },
    getAge() {
      return _age;
    },
    setAge(age) {
      if (age > 0 && age < 150) {
        _age = age;
      }
    },
  };
}

const xiaoming = person('小明');
console.log(xiaoming.getName()); // 输出:小明
console.log(xiaoming.getAge()); // 输出:16

xiaoming.setAge(18);
console.log(xiaoming.getAge()); // 输出:18

person 函数中定义了一个私有变量 _age,并通过返回的匿名函数暴露了两个公共方法 getAgesetAge,这两个方法暴露出来的 _age 变量,即可达到封装变量的效果。

结语

以上是两个实例,可以看到,闭包是 JavaScript 中十分重要的一个概念,通过闭包,可以实现很多有意思的功能,比如模拟私有变量,还可以实现一些高级的设计模式,比如单例模式、工厂模式等等。希望本文能够对大家了解闭包有所帮助。

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

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Javascript ES6中对象类型Sets的介绍与使用详解

    Javascript ES6中对象类型Sets的介绍与使用详解 1. 什么是Sets? Sets是JavaScript中的一种数据结构,它是一个集合,存储不重复的数据。和数组相似,它也是一组有序的数据,但是它有以下区别:- Sets中的数据是唯一的- Sets中的数据是无序的 2. Sets常用的方法 2.1 创建一个Set 可以利用new Set()来创建…

    JavaScript 2023年5月27日
    00
  • JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)

    JavaScript中最容易混淆的作用域、提升、闭包知识详解 作用域 JavaScript采用词法作用域,即函数的作用域在函数定义时就已经确定了,不会随着函数调用的位置改变。因此,JavaScript中存在全局作用域和函数作用域。 全局作用域 全局作用域是指在代码的任何位置都可以访问的变量、函数和对象,它是在所有函数外部定义的作用域。 以下是一个示例,全局作…

    JavaScript 2023年5月28日
    00
  • JS实现注册界面表单校验

    下面是JS实现注册界面表单校验的完整攻略: 步骤一:准备工作 在HTML页面中创建一个表单,表单中包含各种需要验证的输入框,例如:用户名、密码、邮箱等。给表单中的输入框设置相应的属性(例如:name、id、required等),方便JavaScript代码获取和操作。 步骤二:编写JavaScript代码 1. 获取表单元素 在JavaScript中通过do…

    JavaScript 2023年6月10日
    00
  • JavaScript高级之自定义异常

    JavaScript高级之自定义异常 在JavaScript中,异常是非常常见的一种错误处理方式。当出现异常时,程序会立即停止继续执行,并跳转到异常处理器。JavaScript语言本身已经提供了一些内置的异常类型,例如TypeError、ReferenceError等等,但是,在某些特定情况下,你需要自定义异常类型以更好地处理代码中的错误,这时候自定义异常类…

    JavaScript 2023年5月18日
    00
  • Emberjs 通过 axios 下载文件的方法

    以下是详细讲解“Emberjs 通过 axios 下载文件的方法”的完整攻略。 什么是 Ember.js? Ember.js 是一款基于 JavaScript 编写的开源前端框架,它采用了 MVVM(Model-View-ViewModel) 模式,可以帮助我们开发具有高可维护性、高可扩展性的单页 Web 应用。 什么是 axios? axios 是一个基于…

    JavaScript 2023年5月27日
    00
  • asp.net 实现下拉框只读功能

    当我们在 ASP.NET 中使用下拉框时,有时希望该下拉框在不禁用的情况下变为只读状态,这意味着用户仍然可以查看下拉框内容,但不能更改内容。以下是 ASP.NET 实现下拉框只读功能的攻略: 步骤一:使用 ASP.NET 的 DropDownList 控件 要实现下拉框的只读功能,需要在 ASP.NET 中使用 DropDownList 控件。我们可以在 .…

    JavaScript 2023年6月11日
    00
  • 详解angular中通过$location获取路径(参数)的写法

    下面是详解angular中通过$location获取路径(参数)的完整攻略。 一、使用 $location 对象获取路径 在 AngularJS 中,$location 对象用于获取当前 URL 中的路径、搜索、哈希和主机等信息。为了使用 $location 对象,需要将其注入到需要使用的控制器、服务或指令之中。 例如,在控制器中使用 $location 获…

    JavaScript 2023年6月11日
    00
  • JavaScript动画函数封装详解

    JavaScript动画函数封装详解 在网页开发中,我们经常需要运用动画效果来增强页面的交互性和美观度。JavaScript作为前端开发的重要组成部分,也提供了多种方式来实现动画效果。本篇文章将详细讲解如何封装JavaScript动画函数,让动画开发变得更加高效便捷。 为什么要封装JavaScript动画函数 在开发过程中,我们会遇到多个地方需要实现相似的动…

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