javascript学习笔记(十三) js闭包介绍(转)

“JavaScript学习笔记(十三) JavaScript闭包介绍”这篇文章是一篇介绍JavaScript闭包的文章。下面是这篇文章的完整攻略:

JavaScript学习笔记(十三) JavaScript闭包介绍

什么是闭包?

闭包是指函数和函数内部能访问到的变量的总和。也就是说,它指的是一个拥有许多变量和函数的实体。

简单来说,闭包是指在另一个函数内部定义的函数,并且在内部函数中访问了外部函数的变量。这个内部函数就是一个闭包。

闭包的作用

闭包的主要作用是让函数访问其创建时的作用域,即使函数在其原始作用域之外被调用。这种访问机制使得函数可以保存一些变量,从而在每次被调用时都能使用这些变量。

如何创建闭包?

在JavaScript中,闭包是自动创建的,只要在一个函数内部定义了另一个函数,闭包就会自动创建。

下面是一个简单的示例,演示了如何创建闭包:

function outerFunction() {
  var message = 'Hello, world!';

  function innerFunction() {
    alert(message);
  }

  return innerFunction;
}

var myFunc = outerFunction();
myFunc();

在这个示例中,函数outerFunction()内部定义了另一个函数innerFunction(),innerFunction()函数可以访问outerFunction()函数内部的变量message。这种访问机制就是闭包。

当我们在调用outerFunction()函数时,它将返回innerFunction()函数,并将其赋值给变量myFunc。接着,我们调用变量myFunc时,它将执行innerFunction()函数,并弹出一个包含“Hello, world!”消息的警告框。这是因为innerFunction()函数具有访问outerFunction()函数内部变量message的权限,因此可以读取和使用该变量的值。

闭包的例子

下面,我将演示一个更具体的闭包示例。这个示例展示了如何在JavaScript中使用闭包来创建私有变量。

function Person(name) {
  var _name = name;

  this.getName = function() {
    return _name;
  };

  this.setName = function(name) {
    _name = name;
  };
}

var person = new Person('John');
alert(person.getName()); // 输出 'John'
person.setName('Mike');
alert(person.getName()); // 输出 'Mike'

在这个示例中,我们创建了一个构造函数Person(),该函数具有一个私有变量_name。Person()函数还定义了两个公共方法:getName()和setName(),这两个方法分别用于获取和设置_name变量的值。

当我们使用new运算符创建一个新的Person对象时,该对象中的_name变量将被初始化为'name'参数的值(在这个例子中是'John')。此后,我们可以通过调用person.getName()方法获取_name的值,也可以通过调用person.setName()方法将其设置为一个新值。

值得注意的是,_name变量是私有的,因为它只能通过这两个公开方法来访问。这是因为它是在Person()函数内部定义的,并且只能在函数内部访问。由于getName()和setName()方法都是在Person()函数内部定义的,并具有访问__name变量的权限,因此它们可以用于读取和修改_name变量的值,从而实现了一个私有变量。这就是闭包的神奇之处。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript学习笔记(十三) js闭包介绍(转) - Python技术站

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

相关文章

  • javascript dom 基本操作小结

    Javascript DOM 基本操作小结 在编写基于Web的Javascript应用程序时,经常需要对Document Object Model(DOM)进行操作。本文将介绍DOM基本操作的相关知识,并提供一些示例。 什么是DOM? DOM是指文档对象模型(Document Object Model),用于在HTML或XML文档中表示和操作元素。DOM将整…

    JavaScript 2023年6月10日
    00
  • javascript数组去重方法分析

    一、问题背景 在前端开发中,我们经常需要对JavaScript数组进行去重操作,以便保证数据的一致性和完整性。那么JavaScript数组去重的方法有哪些呢?本文将对目前主流的JavaScript数组去重方法进行详细的分析和讲解。 二、方法分析 利用Set数据结构 Set是ES6中的一种数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。我们可以通…

    JavaScript 2023年6月11日
    00
  • 深入理解javascript严格模式(Strict Mode)

    深入理解JavaScript严格模式 JavaScript严格模式(Strict Mode)是ECMAScript 5引入了一种新的执行模式,主要用于消除JavaScript语言的一些不合理、不严谨之处,减少一些怪异行为。 启用严格模式 全局启用严格模式 要想在全局范围启用严格模式,需要在JavaScript源码文件的顶部添加如下代码: "use …

    JavaScript 2023年5月28日
    00
  • JavaScript实现瀑布动画

    下面是详细讲解“JavaScript实现瀑布动画”的完整攻略: 什么是瀑布动画? 瀑布动画又叫瀑布流布局,是指网页图片或内容呈现成瀑布状排布的效果,每一列内部呈垂直方向排列,列与列之间则按照一定的间距排列,整个布局的效果类似于瀑布流。 实现瀑布动画的技术 要实现瀑布动画,需要使用CSS和JavaScript实现。其中,CSS主要用于布局的排版,通过设置每一列…

    JavaScript 2023年6月10日
    00
  • ajax 技术和原理分析

    AJAX 技术和原理分析 什么是 AJAX AJAX 全称 Asynchronous JavaScript And XML,即异步 JavaScript 和 XML。它是一种用于 Web 开发的技术,允许在客户端和服务器之间进行异步数据请求,从而避免了重新加载整个网页的必要性,使得页面更加快速和动态。通过 AJAX,可以实现无刷新地更新部分数据、响应用户的输…

    JavaScript 2023年6月11日
    00
  • ES6与CommonJS中的模块处理的区别

    ES6与CommonJS是两种不同的JavaScript模块处理方式,在模块的定义和使用上有很大的不同。以下是ES6与CommonJS中的模块处理的区别的完整攻略。 ES6模块处理 ES6模块处理方式是JavaScript新标准ES6中引入的一种新的模块处理方式。ES6模块采用了静态导入(import)和导出(export)来定义和使用模块。 ES6模块定义…

    JavaScript 2023年6月10日
    00
  • 无语,javascript居然支持中文(unicode)编程!

    当我看到 “无语,JavaScript居然支持中文(Unicode)编程!” 这句话时,我相信说的是JavaScript支持使用Unicode字符作为标识符。这意味着您可以在JavaScript编程时使用中文或其他unicode字符,这对特定项目或程序员可能很有用。 下面是使用JavaScript中文(Unicode)标识符的完整攻略。 使用Unicode字…

    JavaScript 2023年5月19日
    00
  • js 数组操作之pop,push,unshift,splice,shift

    JS数组操作之pop, push, unshift, splice, shift 在JavaScript编程中,数组是重要的数据结构之一。这里将讲解JS中常用的5种数组操作方法——pop, push, unshift, shift和 splice。 1. pop pop()方法是用于移除并返回数组中的最后一个元素。它会改变原始的数组。 语法: arr.pop…

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