javascript闭包

来源:互联网 发布:photoshop mac版价格 编辑:程序博客网 时间:2024/05/21 15:49
什么是闭包?
闭包(closure)function a(){var i=0;function b(){alert(++i);}return b;}var c=a();c();
闭包就是属性和函数的外调,外界想通过某种技术手段访问函数里面的变量或者方法,得到变量作用域的延续,延续当前变量的生命周期,变量和函数不会被GC回收。
闭包的作用就是在a执行完并返回后,闭包使得javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

javascript闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数的执行完成而销毁。这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b就是说:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。

解释:

闭包就是属性和函数的外调,外界想通过某种技术手段访问函数里面的变量或者方法,得到变量作用域的延续,延续当前变量的生命周期,变量和函数不会被GC回收。
1、闭包和垃圾回收机制GC是相关联的;
2、闭包实际上是在涉及到一个对象的成员属性,何时被GC处理的问题;
3、怎样才能对对象的属性形成一个闭包

<html><head><title>js示例闭包closure演示</title><script language="javascript" type="text/javascript"><!--function a(){this.i=0;function b(){alert(++i);}return b;}//闭包是和GC垃圾回收机制相关的。a();//此时a调用使用了函数中的i后,GC扫描i无任何函数指向时,就会回收释放空间。var c=a();//而a调用后将b赋给c了,GC扫描知道c得到的返回值b中包含了i,此时GC会判断i虽然没有使用,但仍有变量指向,GC暂时不能回收并释放空间,并将i先保留。c();//--></script></head><body></body></html>


1 0
原创粉丝点击