js闭包

来源:互联网 发布:淘宝客在哪里参加 编辑:程序博客网 时间:2024/06/06 03:23

闭包的概念

  • 可简单理解为读取其他函数内部变量的函数
    function a() {        var i = 0;        function b() { alert(++i); }        return b;    }    var c = a();    c();

引用关系如图:
image
当函数a的内部函数b被函数外的一个变量引用是创建了一个闭包
执行完var c = a()后,变量c指向函数b,执行c(),会弹出i的值。a执行完返回时,闭包会使a所占资源不被收回,函数a返回后a中的i始终存在,每次执行c(),i自加后alert,假如a返回的不是函数b,a只会被b引用,那么执行结束后,a,b被回收(javascript中,一个对象不再被引用则会被回收,两对象互相引用不被第三者引用,两者会被回收)。

闭包的用途

1. 从外部得到函数内部的局部变量

例如:

function f1(){    var n=999;    function f2(){        alert(n);    }    return f2;}var result = f1();result()//999

2. 用于让变量的值始终保持在内存里。

例如:

function f1(){    var n=999;    nadd = function(){        n+=1    }    function f2(){        alert(n);    }    return f2;}var result =f1();result();//999nadd();result();//100

result运行了两次,f1中的局部变量没有清除。

php闭包语法:use

$arg ='text';$test = function() use($arg) {    var_dump($arg);};$test();//输出text
$arg = 'text';$test = function () use ($arg) {    var_dump($arg);    $arg = 'text2';};$test();//输出test$arg = 'text3';$test();//输出test

参考

javascript深入理解js闭包

原创粉丝点击