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日

相关文章

  • JS中Date日期函数中的参数使用介绍

    关于JS中Date日期函数中的参数使用介绍,下面是一份详细的攻略。 JS中Date日期函数参数使用介绍 在JS中,日期函数Date()是常用的一个函数之一。该函数有许多不同的参数,下面一一介绍。 Date()函数的常见参数及描述 参数 描述 new Date() 生成当前时间对象 new Date(value) 根据时间戳(自1970年1月1日至今的毫秒数)…

    JavaScript 2023年5月27日
    00
  • JavaScript实现获取dom中class的方法

    实现获取DOM中class的方法,可以使用原生JavaScript中的classList属性,也可以使用jQuery中的选择器方法。 使用原生JavaScript 获取DOM元素节点 javascript var element = document.getElementById(‘elementId’); 获取节点中的class列表 javascript …

    JavaScript 2023年6月10日
    00
  • javascript实现动态导入js与css等静态资源文件的方法

    要在JavaScript中动态导入JS和CSS等静态资源文件,可以使用以下方法: 1. 使用DOM API 可以直接通过JavaScript的DOM API创建<script>和<link>元素,然后将其添加到HTML的<head>或<body>标签中以动态加载JS和CSS文件。 动态导入JS文件 // 利用D…

    JavaScript 2023年5月27日
    00
  • JS取request值以及自动执行使用示例

    当我们需要从前端页面向后台传递数据时,通常都需要通过url传递一些参数。而后台处理这些参数时,就需要通过解析请求中包含的请求体(body)或请求头(header)来获取这些参数值。下面就来讲解一下JS如何取得request中的值。 一、JS获取URL参数 在前端页面中,我们可以通过获取window.location对象来获取当前url。而当前url中所包含的…

    JavaScript 2023年6月11日
    00
  • javascript保留两位小数的实现方法你了解吗

    当需要在JavaScript中将一个数字保留两位小数时,通常有几种不同的方法可以实现。 方法一:使用toFixed()函数 .toFixed()函数是JavaScript中的内置函数,可以将数字转换为带有指定小数位数的字符串格式。 const num = 3.141592654; const roundedNum = num.toFixed(2); cons…

    JavaScript 2023年5月28日
    00
  • 详解JavaScript中jQuery和Ajax以及JSONP的联合使用

    详解JavaScript中jQuery和Ajax以及JSONP的联合使用 概述 在现代前端开发中,通过AJAX技术可以实现无需整页刷新的异步加载数据,从而提升用户体验。而jQuery作为目前最流行的JavaScript库,为我们提供了非常便捷的Ajax操作API。除此之外,由于浏览器的同源策略,我们需要借助JSONP跨域获取到其他域名下的数据,在此过程中jQ…

    JavaScript 2023年6月11日
    00
  • JavaScript中的类(Class)详细介绍

    下面是关于JavaScript中的类的详细介绍: 什么是类? 在计算机编程中,类是一种重要的概念。类是由数据和代码组成的数据类型,是一种面向对象的编程思想。JavaScript中的类就是一个模板,它描述了一个对象应该有哪些属性和方法。 如何定义一个类? 在JavaScript中,定义一个类使用class关键字,语法如下: class 类名 { // 构造函数…

    JavaScript 2023年5月27日
    00
  • JS获得一个对象的所有属性和方法实例

    获取一个对象的所有属性和方法实例有多种方式,下面将介绍其中两种常用的方法。 1. 使用 Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols() Object.getOwnPropertyNames() 可以获取对象自有的所有属性名,包括不可枚举的属性(例如,通过 Object.defineP…

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