beanshell是一个小型的嵌入式java源代码解释器,具有对象脚本语言的特性,可以动态执行标准的java语法,并通过使用javascript和p
写一个最简单的闭包函数:
ltscriptgt
函数fn1(){
varx10
函数fn2(){
警报(x)
}
返回fn2//返回fn2的地址。
}
varfnfnfn1()//相当于fn指向fn2的地址。
fn()//执行fn2函数。
lt/scriptgt
说明:执行varfnfnfn1()后,fn1()会进行函数调用,执行fn1的函数体。执行后会返回fn1函数对象中内部函数fn2函数对象的地址。按理说应该释放fn1函数中的局部变量x,但是因为fn2函数中alert(x)使用了局部变量x,那么js引擎就可以此时t垃圾回收fn1函数对象,因为如果fn1函数对象被垃圾回收,意味着x变量被释放,fn2函数对象怎么会使用x变量呢?而varfnfnfn1()实际上相当于fn变量指向fn2函数对象的地址。由于是函数地址,所以可以调用fn()函数,fn2函数对象在fn1函数内部,也就是说fn1函数对象不能垃圾回收,也就是说外部可以访问函数内部的局部变量。
关闭的功能:
1.您可以访问函数的内部变量。
2.使这个局部变量占用的内存不被释放。