Javascript设计模式(二)闭包
2023-06-13 09:14:18 时间
正文
闭包的概念:
闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
最常见的闭包
复制代码代码如下:
闭包的概念:
闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
最常见的闭包
functiona(){
vari=0;
returnfunction(){
alert(i++);
}
}
varb=a();
for(vari=0;i<3;i++){
b();
}
解释上面代码前,先接受一个函数的创建和执行过程
第一步:定义函数,设置环境,创建作用域链(scopechain)现a为全局变量,则a的作用域链中只有window
第二步:执行a,首先创建作用域(a.scope=a),然后创建活动对象(callObject),并将callObject放入a的作用域链的顶端,因此a的作用域链中含有两个对象(a和window)
第三步:在活动对象上添加一个arguments属性,保存调用a时的参数值
第四步:将形参和内部变量赋值到活动对象a上
javascriptGC原理:如果一个对象不再被引用,那么这个对象会被GC回收。如果两个对象无干扰的互相引用,那么这两个对象也会被回收。
总结:
1、首先定义a时,创建了a的作用域链(scopechain)
2、(varb=a())执行a时,创建作用域a.scope=a,并创建callObject对象添加a的作用域中
3、a对象上添加了arguments属性,并将i和return函数赋值给活动对象
4、执行a时将b指向了a的ruturn函数值,在b中又引用的a中的局部变量i,因此不符合GC的回收标准,活动对象a没有被回收,因此b访问i是第一次访问的对象,并且只有在b中才能访问
相关文章
- (精华)2020年6月28日 JavaScript高级篇 设计模式-发布订阅模式
- Javascript数组排序sort方法和自定义排序方法
- JavaScript设计模式—-策略模式[通俗易懂]
- 【说站】javascript异步回调是什么
- 为什么说:JavaScript 模块中的默认导出很糟糕
- 手写JavaScript常见5种设计模式1
- JavaScript之对象(二)
- javascript 时间格式输出FormatDate函数详解编程语言
- 注意JavaScript中RegExp对象的test方法
- Javascript!!的作用
- JavaScript设计模式学习Factory
- JavaScript高效运行代码分析
- JavaScript设计模式之组合模式解析
- Javascript异步加载详解(浏览器在javascript的加载方式)
- javascript学习笔记(五)Array数组类型介绍
- javascript学习笔记(九)js对象设计模式
- JavaScript验证码的实例代码(附效果图)
- 利用noesis.Javascript开源组件.Net中执行javascript脚本
- javascript设计模式之解释器模式详解
- 编程语言JavaScript简介
- JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
- JavaScript设计模式之单件模式介绍
- JavaScript中伪协议javascript:使用探讨
- Javascript基础教程之JavaScript语法