js 点击闭包_原生JS的闭包详解

了解闭包之前我们需要懂的东西:需要知道JS的作用域链以及预解析。

进入话题,作用域链上面的东西是存在哪里的呢。 是一个栈结构,最底层是window对象。

栈就是类似一个桶装结构,如图1:

图一 :

  栈结构具有的特点就是先入后出。 好比你放进桶里的东西,你需要从最上面开始拿出来。

JS代码的解析过程中:例如JS代码里有一个函数foo.

var a = 1;

function foo()

{ }

foo();

预解析:那么预解析到这个函数时,发生了如下的事情:   由于函数是引用类型的对象,实际数据存在堆里,那么在栈里只存放了地址。0x1101这个地址指向堆的实际数据。

运行到这个函数时,它会创建一个foo的作用域链对象。然后存入一个栈里,这个栈底层永远是window.

函数执行=>foo() 又会发生的事情:栈里面的foo创建了一个活动对象。即执行了这个函数。

当函数执行完毕:foo的作用域链出栈,没有被指向的活动对象即销毁。但是window不会被销毁。

(PS:橡皮擦太小了,没擦干净)

闭包是什么呢? 官方解答是有权去访问函数内的变量。

我们现在来写一个函数:

function foo(){var n = 0;//返回了一个函数。 这个函数的n 是从foo里面找的n。

returnfunction getNum()

{

n++;

console.log(n);returnn;

}

}var fn =foo();

fn();

预解析就会多了一步:在执行foo的时候,也就是创建活动对象之后,会再执行 getNum的入栈步骤。getNum被调用时也会创建一个活动对象。但是最后并不会销毁。

因为fn指向了这个闭环回路。

简单的讲:这个函数被保存在了内存之中,并且一直可以通过fn访问到。

函数调用结束后:如果用fn指向这个getNum的作用域链对象。只要fn到getNum的指向没有消失。那么就可以一直访问到存储在内存的n.

闭包的核心就是getNum的活动对象没有被销毁,即使fn指向不是这个getNum 这个东西封闭的环也不会注销,会一直在内存中,这也是闭包的缺点,容易造成内存泄漏。

我们现在来梳理一下闭包的步骤:

1.函数内部嵌套子函数,

2.子函数得到父函数的值。

3.把内层函数返回出去。(但闭包的创建不止这个形式。还有其他的。)

PS:如何回答的一个技术记汇,或你对xxxx的理解

例如:你说一下对闭包的理解

答:1.xxx是什么

​ 2.应用场景

​ 3.优缺点

​ 4.具体实现

​ 5.还有没有更好的解决方案!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值