零基础轻松学JavaScript闭包

零基础轻松学JavaScript闭包

什么是闭包

闭包的定义

闭包是指那些能够访问自由变量的函数。自由变量是指在函数中使用,但既不是函数参数,也不是函数的局部变量的变量。

闭包 = 函数 + 函数能够访问的自由变量

闭包的作用

闭包主要有以下两个作用:

  1. 延长外部作用域中变量的声明周期。当一个函数返回了一个内部函数后,内部函数会继续保持对外部函数的作用域的引用,
    这个引用就叫做闭包。闭包通过保持引用关系,使得外部函数执行完后,其内部变量以及状态依然能够被保持下来。

  2. 在JS中实现模块化开发。

如何使用闭包

实现顺序执行的定时器

通过闭包,可以让定时器依次执行。示例代码如下:

function runner() {
  for (var i = 0; i < 5; i++) {
    (function(j) {
      setTimeout(function() {
        console.log(j);
      }, j * 1000);
    })(i);
  }
}
runner(); 

上述代码中,通过使用立即执行函数来保留定时器执行时的i的值,从而达到依次执行的目的。

实现模块化开发

通过闭包,可以实现模块化开发,避免全局变量污染等问题。示例代码如下:

var moduleA = (function() {
  var count = 0;
  return {
    increaseCount: function() {
      count++;
    },
    getCount: function() {
      return count;
    }
  };
})();

上述代码中通过使用立即执行函数返回了一个对象,对象中保存了count变量的值和两个方法。通过闭包,count变量的值可以在模块内部进行读写,外部无法直接访问,不会对全局命名空间造成影响。

结语

通过本篇攻略,你已经初步了解了什么是闭包、闭包的作用,以及如何使用闭包,在实际开发中遇到问题时,可以结合代码进行实践操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:零基础轻松学JavaScript闭包 - Python技术站

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

相关文章

  • JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码

    JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码 URI是统一资源标识符,URI包含了绝对URI和相对URI两种方式。其中,绝对URI包含协议、主机名、文件名和查询参数,而相对URI只需要相对于当前文件所属的路径进行命名即可。 URI编码就是为了解决URI含有特殊字符而无法被正确显示、传递和处理的问题…

    JavaScript 2023年5月20日
    00
  • js Object2String方便查看js对象内容

    这里是关于如何使用 JavaScript 的 Object2String 来方便查看 JavaScript 对象内容的详细攻略: 安装: Object2String 是当下比较常用的一个 npm 模块,并且可以通过命令行快速安装: npm install obj2str 用法: 在代码中,我们可以使用 require 或者 import 的方式引入 obj2…

    JavaScript 2023年5月27日
    00
  • 原生js轮播特效

    原生JS轮播特效是一种常见的网页设计效果,下面是一些实现的步骤和示例: 步骤 创建HTML布局 要实现轮播特效,需要一个包含轮播图片的容器和一组控制轮播的选择器。这个容器可以是一个div或ul元素。 设置CSS样式 设置容器和选择器的CSS样式,包括宽度,高度,颜色,字体大小和间距等。 编写JavaScript代码 3.1 获取容器和选择器元素的引用 3.2…

    JavaScript 2023年6月11日
    00
  • JavaScript基于replace+正则实现ES6的字符串模版功能

    如果想要实现ES6中提供的字符串模版功能,不使用ES6的新特性,也能够用JavaScript实现。具体步骤是使用replace函数以及正则表达式,将需要替换的变量插入到字符串模版中。 以下是一份完整的攻略,帮助您实现这个功能: 步骤 1:定义写入字符串模板的变量 定义所需的字符串模板和变量。例如,在下面的示例中,定义了模板字符串 Hello, $ {name…

    JavaScript 2023年5月28日
    00
  • jquery ajax post提交数据乱码

    下面是详细的攻略: 一、问题描述 当使用 jQuery 的 AJAX 功能来提交表单数据时,有时会出现提交的中文乱码的问题。问题表现为:在后台处理接收到的数据的时候,中文字符会被解析为乱码,这给我们的开发和调试带来了不必要的麻烦。 二、问题分析 出现该问题的原因是因为,提交数据时如果没有指定编码方式,浏览器会使用当前页面的默认编码方式,而当前页面的编码方式不…

    JavaScript 2023年5月19日
    00
  • js刷新框架子页面的七种方法代码

    让我们开始吧。 1. 使用location.reload()方法 使用location.reload()方法可以重新加载当前页面,包括全部资源(例如JS、CSS、图片等)。将该方法应用到一个窗口的iframe子框架中,即可实现刷新子页面的效果。 window.frames["frame_name"].location.reload(); …

    JavaScript 2023年6月11日
    00
  • JavaScript简单计算人的年龄示例

    下面我会详细讲解如何实现“JavaScript简单计算人的年龄示例”,主要步骤如下: 第一步:获取出生年份 要计算一个人的年龄,首先我们需要获取他的出生年份。在JavaScript中,我们可以通过 prompt()函数获取用户在弹出的对话框中输入的信息。代码如下所示: let birthYear = prompt(‘请输入你的出生年份’); 这里用 let …

    JavaScript 2023年5月28日
    00
  • JavaScript 中的单例内置对象Global 与 Math

    JavaScript 中的单例内置对象 Global 是指在整个 JavaScript 运行时期内始终存在的对象,它是所有全局变量和函数的宿主。它提供了很多通用的功能和属性,如全局变量、内存管理、计时器、调试工具等,可以被任何代码访问和使用。下面我们来讲解 Global 对象和 Math 对象的详细内容。 Global 对象 Global 对象是每一个 Ja…

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