js中的闭包
时间:2019-08-18
本文章向大家介绍js中的闭包,主要包括js中的闭包使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 什么是闭包:当内部函数保存到外部时,导致原有的作用域链不被释放,闭包容易造成内存泄露
function demo(){ //demo()的作用域 demo --[{AO}{GO}] 即自己的作用域和全局的作用域
var a;
function b(){ //b()的作用域 b -- [{AO}{DemoAo}{GO}] 自己的作用域和父级的作用域
console.log('b')
}
return b //内部函数被保存到外部
}
var c = demo() //正常情况下dmeo()执行完后,AO会被垃圾回收机制回收,但是因为存在b()还在用dmeo()的AO,所以不会被垃圾会收机制给回收
// c是一个全局的引用,所以只有等到全局结束后demo的Ao才会被释放
c()
- 闭包的作用
2.1 实现公有变量的累加
function demo(){
var a = 0;
function test(){
a ++;
console.log(a)
}
return test
}
var c = demo()
c() //1
c() //2
c() //3
//a 每次执行会在原来的基础上增加一次, 原因是demo的AO,被保存到外部后就不会再次生成,所以c执行都拿着原来的demo的AO在自加
2.2 可以做缓存
function num(){
var a = 100;
function add(){
a ++;
console.log(a)
}
function sub(){
a --;
console.log(a)
}
return [add, sub]
}
var demo = num() //说明两个用的是同一个AO
demo[0](); //101
demo[1](); //100
demo[0](); //101
2.3 可以实现封装,属性私有化,模块化开发防止变量污染全局
(
function(doc){
var a = 100; // a就只可以在obj内使用不会污染全局变量
var obj = {
add: function(a, b){
return a + b
},
sub:function(){
return a - b
}
}
window.obj = obj
}(1)
)
console.log( obj.add(3, 5))
原文地址:https://www.cnblogs.com/ghostdot/p/11373270.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法