JavaScript 闭包实践

2023-05-26 0 348

透过深入细致介绍 JavaScript 的高阶基本概念众所周知:旋量群,更快地认知 JavaScript 标识符的组织工作和继续执行形式。

JavaScript 闭包实践

在《JavaScript 这般畅销的 4 个其原因》中,我提及了许多高阶 JavaScript 基本概念。在责任编辑中,我将研讨当中的两个基本概念:旋量群closure。

依照 Mozilla 开发人员互联网(MDN),“旋量群是将两个表达式和对其周遭的状况(语法结构自然环境)的提及绑定在一同(半封闭)的女团。”简而言之,这意味著在两个表达式外部的表达式能出访其外部(父)表达式的表达式。

为的是更快地认知旋量群,能看一看返回值或其继续执行语句。

上面是两个单纯的标识符短片:

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

上面是那段标识符的继续执行语句:

JavaScript 闭包实践

每天建立表达式时(在表达式建立期)单厢建立旋量群。每一旋量群有四个返回值。

邻近地区返回值(他们的作用域)外部表达式覆盖范围自上而下覆盖范围

我稍微修改一下上面的标识符来演示一下旋量群:

var hello = “Hello”; var sayHelloWorld = function { var world = “World”; function wish { var year = “2021”; console.log(hello + ” “ + world + ” “+ year); } return wish; } varcallFunc = 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 record var resourceRecord1 = resourceRecord(“Perry”,“Office”); // Create second record var resourceRecord2 = resourceRecord(“Emma”,“Office”); // Change the address on the first record resourceRecord1.changeAddress(“Home”); resourceRecord1.changeName(“Perry Berry”, “Associate”); // Output is false as only an HR can change the name resourceRecord2.changeName(“Emma Freeman”, “HR”); // Output is true as HR changes the name resourceRecord1.showResourceDetail; // Output – Nameerry ; Address:Home resourceRecord2.showResourceDetail; // Output – Name:Emma Freeman ; Address:Office

资源记录(resourceRecord1和resourceRecord2)相互独立。每一旋量群透过他们的旋量群提及不同版本的resourceName和resourceAddress表达式。你也能应用特定的规则来处理私有变量,我添加了两个谁能修改resourceName的检查。

使用旋量群

认知旋量群是很重要的,因为它能更深入细致地介绍表达式和表达式之间的关系,以及 JavaScript 标识符如何组织工作和继续执行。

via: https://opensource.com/article/21/2/javascript-closures

作者:Nimisha Mukherjee选题:lujun9972译者:wxy校对:wxy

责任编辑由 LCTT原创编译,Linux中国荣誉推出

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务