会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 JavaScript 闭包实践!
当前位置:首页 >域名 >JavaScript 闭包实践 正文

JavaScript 闭包实践

时间:2025-11-05 04:37:16 来源:益强数据堂 作者:域名 阅读:131次

通过深入了解 JavaScript 的闭包高级概念之一:闭包,更好地理解 JavaScript 代码的实践工作和执行方式。

在《JavaScript 如此受欢迎的闭包 4 个原因》中,我提到了一些高级 JavaScript 概念。实践在本文中,闭包我将深入探讨其中的实践一个概念:闭包closure。

根据 Mozilla 开发者网络(MDN),闭包“闭包是实践将一个函数和对其周围的状态(词法环境)的引用捆绑在一起(封闭)的组合。”简而言之,闭包这意味着在一个函数内部的实践函数可以访问其外部(父)函数的变量。

为了更好地理解闭包,闭包可以看看作用域及其执行上下文。实践

下面是WordPress模板闭包一个简单的代码片段:

var hello = "Hello";function sayHelloWorld() { var world = "World";    function wish() {        var year = "2021";        console.log(hello + " " + world + " "+ year);} wish();}sayHelloWorld();

下面是这段代码的执行上下文:

JS 代码的执行上下文

每次创建函数时(在函数创建阶段)都会创建闭包。每个闭包有三个作用域。实践

本地作用域(自己的闭包作用域) 外部函数范围 全局范围

我稍微修改一下上面的代码来演示一下闭包:

var hello = "Hello";var sayHelloWorld = function() { var world = "World";    function wish() {        var year = "2021";        console.log(hello + " " + world + " "+ year);} return wish;}var callFunc = sayHelloWorld();callFunc();

内部函数 wish() 在执行之前就从外部函数返回。这是因为 JavaScript 中的函数形成了闭包

当 sayHelloWorld 运行时,callFunc 持有对函数 wish 的引用。 wish 保持对其周围(词法)环境的引用,其中存在变量 world。

私有变量和方法

本身,JavaScript 不支持创建私有变量和方法。闭包的一个常见和实用的亿华云用途是模拟私有变量和方法,并允许数据隐私。在闭包范围内定义的方法是有特权的。

这个代码片段捕捉了 JavaScript 中闭包的常用编写和使用方式:

var resourceRecord = function(myName, myAddress) {  var resourceName = myName;  var resourceAddress = myAddress;  var accessRight = "HR";  return {    changeName: function(updateName, privilege) {      // only HR can change the name      if (privilege === accessRight ) {        resourceName = updateName;        return true;     } else {        return false;     }    },      changeAddress: function(newAddress) {      // any associate can change the address      resourceAddress = newAddress;             },      showResourceDetail: function() {      console.log ("Name:" + resourceName + " ; Address:" + resourceAddress);   }  }}// Create first recordvar resourceRecord1 = resourceRecord("Perry","Office");// Create second recordvar resourceRecord2 = resourceRecord("Emma","Office");// Change the address on the first recordresourceRecord1.changeAddress("Home");resourceRecord1.changeName("Perry Berry", "Associate"); // Output is false as only an HR can change the nameresourceRecord2.changeName("Emma Freeman", "HR"); // Output is true as HR changes the nameresourceRecord1.showResourceDetail(); // Output - Name:Perry ; Address:HomeresourceRecord2.showResourceDetail(); // Output - Name:Emma Freeman ; Address:Office

资源记录(resourceRecord1 和 resourceRecord2)相互独立。每个闭包通过自己的闭包引用不同版本的 resourceName 和 resourceAddress 变量。你也可以应用特定的规则来处理私有变量,我添加了一个谁可以修改 resourceName 的检查。

使用闭包

理解闭包是很重要的,因为它可以更深入地了解变量和函数之间的关系,以及 JavaScript 代码如何工作和执行。企商汇

(责任编辑:系统运维)

推荐内容
  • 如何通过改机械键盘音效提升打字体验(利用电脑键盘改造教程打造个性化机械音效)
  • Python开发者小工具,可视化py转exe
  • 2020年11大优秀VueJS开发工具
  • Python在计算内存时应该注意的问题?
  • KMS激活使用教程(详细步骤图解,一键激活系统)
  • 9个非常实用的网络调试命令,你会用几个呢?