千家信息网

怎样解析javascript的闭包

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,今天就跟大家聊聊有关怎样解析javascript的闭包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是闭包:闭包是一个存在内部函数的引用关
千家信息网最后更新 2025年02月01日怎样解析javascript的闭包

今天就跟大家聊聊有关怎样解析javascript的闭包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

什么是闭包:

闭包是一个存在内部函数的引用关系。

该引用指向的是外部函数的局部变量对象(前提是内部函数使用了外部函数的局部变量)

闭包的作用:

延长外部函数变量对象的生命周期

使用闭包能够间接的从函数外部访问函数内部的私有变量

一、常见的闭包

function outer() {  var a = 1  function inner() {    console.log(a)    //1  }  inner()}outer()

二、实例详解

function createFunc() {  var result = new Array()  for (var i = 0; i < 10; i++) {    result[i] = function () {      console.log(i)    }  }  return result}var result = createFunc()result[0]() //10result[1]() //10result[2]() //10result[3]() //10result[4]() //10result[5]() //10result[6]() //10result[7]() //10

首先在代码执行前,会先创建一个全局的对象,其中包含着全局的属性,并且将其放入全局上下文作用域链顶端,并且也将其放入每一个函数的作用域链顶端。以这个例子为例。如图所示

在初始化结束后,开始执行代码,此时就会创建一个新的对象,叫做Active Object,其中放入一些参数,并且将其压入createFunc函数的作用域链中。

因为在createFunc中仍然定义函数result[i]..,所以在执行代码前,该函数会形成作用域链。

此时开始执行createFunc函数,当指向完毕后,createFunc中的作用域链表现为。如下图所示。此时result为一个数组。并且Active object已经从createFunc作用域链的顶部删除。

此时开始执行result[0](这里以result[0]为例,其他的一样),此时执行result[0]之前,应该创建一个新的Active object对象,将其放入result[0]执行作用域栈中。如图所示

此时函数执行中需要访问i,但是在active object并不存在i,所以此时需要沿着作用域链进行查找,在createFunc中找到i,并且i的值为10,所以最终打印的值都是10。在createFunc执行完毕后,其创建的对象并没有被垃圾回收掉,因为在result[0]中的i依然保持对该对象的引用。

这个例子的解决方法如下所示,就是设置一个立即执行函数,每一个下标对应的函数,都是立即执行函数,当立即执行函数执行时,每一个函数的上下文对象中都会存在为正确的下标值。

function createFunc() {  var result = new Array()  for (var i = 0; i < 10; i++) {    result[i] = (function (num) {      return function() {        console.log(num)      }    })(i)  }  return result}var result = createFunc()result[0]() //0result[1]() //1result[2]() //2result[3]() //3result[4]() //4result[5]() //5result[6]() //6result[7]() //7

JavaScript可以做什么

1.可以使网页具有交互性,例如响应用户点击,给用户提供更好的体验。 2.可以处理表单,检验用户的输入,并提供及时反馈节省用户时间。 3.可以根据用户的操作,动态的创建页面。 4使用JavaScript可以通过设置cookie存储在浏览器上的一些临时信息。

看完上述内容,你们对怎样解析javascript的闭包有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

函数 作用 对象 闭包 用户 变量 代码 全局 内容 上下 上下文 例子 局部 指向 顶端 如图 下标 交互性 会创 前提 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云计算和网络技术哪个好 国家的网络技术最先进 自动化系统网络安全内容 软件开发项目售后服务承诺函 服务器无法挂载磁盘阵列 服务器老是蓝屏怎么回事 安卓手机如何设置默认服务器端口 系统软件包括数据库系统吗 服务器cpu套件是什么意思 sql数据库地址设置密码 云服务器怎么配置ftp网站 网络安全宣传周征集 学校网络安全教学视频 北理工网络安全研究生就业前景 用友t3服务器可以访问吗 软件开发项目课设心得体会 远程服务器怎么登录 上海德搜网络技术有限公司 代理服务器又什么用 潍坊蔚领网络技术有限公司 河南net软件开发服务费 控制器软件开发好跳槽吗 服务器液体 如何看数据库用户的权限 编制网络安全预算相关文件 最新计算机网络技术有哪些 深圳视觉软件开发 修改数据库名称代码 泗洪个性化网络技术是什么 无人机架构软件开发
0