js-闭包
来源:互联网 发布:工艺角 知乎 编辑:程序博客网 时间:2024/05/29 08:47
书本上的定义太深奥,网上的版本又多样,还是记一下自己的理解吧!
简单说闭包就是:有权访问其他函数作用域变量的函数!其本质还是函数。
简单的例子:
<script>function A() { var x = 1; return function () { x++; console.log(x); }} var rel = A(); rel();//2 rel();//3</script>
这里rel函数就是一个闭包,她可以访问函数A内部变量x的值。
由于rel函数一直在执行A函数,所以A函数内部的变量没有被销毁,这样就实现了保存变量的目的。
闭包注意事项
判断作用域指向的对象是否一致
例一:
<script>function A() { var x = 1; return function () { x++; console.log(x); }} var rel1 = A(); rel1();//2 rel1();//3 var rel2 = A(); rel2();//2 rel1();//4</script>
rel1和rel2都重新引用了函数A,是相互独立的。函数被引用时,她才创建执行环境和变量对象,当函数执行完毕后,就会销毁其执行环境和变量对象,这是js函数的执行机制。
例二:
function A() { var x = 1; var rel = []; rel[0] = function () { x++; console.log(x); }; rel[1] = function () { x++; console.log(x); }; return rel;} var fun = A();//第一次运行A返回一个数组,这个数组包含了两个函数 fun[0]();//2 fun[1]();//3</script>
这里A只运行了一次,所以fun[0]和fun[1]两个函数指向的都是一个变量对象。
- 变量的值的判断
《JavaScript高级程序设计》一书中有这样一个经典的例子:
<script> function A() { var funs = []; for(var i=0;i<10;i++){ funs[i] = function B(num) { return function C() { return num; } }(i) } return funs; } var funs = A();//定义funs[0]到funs[9]这九个函数 console.log(funs[3]());//3 console.log(funs[6]());//6</script>
B、C函数的名字自己取得,便于解释;funs[i]= function B(num)(i)是个立即执行函数,及时把i的值传给局部变量num被函数C存起来,这样就B立即被执行了10次,B就生成10个活动变量!
1 0
- js闭包示例
- JS 闭包 计数器
- js闭包
- js 闭包
- js闭包
- js闭包
- js闭包
- js 闭包
- js 闭包
- js闭包
- js闭包
- (function (){})(); JS 闭包
- JS 闭包应用
- js闭包
- JS闭包
- JS 闭包随笔
- js闭包
- js 闭包
- mysql导入导出数据
- 从ICLassFactory 为 CLSID的COM组建创建实例失败:c001f011
- LintCode:硬币排成线(1 2)
- sequence to sequence
- C++笔试面试常考知识点汇总(一)
- js-闭包
- JSContext 内存泄露
- new与delete
- 规则引擎
- 包图 包图网 免费psd素材分享
- 一、启动模式介绍
- Mysql表分区的利弊
- 学习python科学计算,数据挖掘等内容怎样搭建环境
- Java 比较器