javascript 闭包

来源:互联网 发布:lockin china 知乎 编辑:程序博客网 时间:2024/06/05 20:47

javascript 闭包

/** * 闭包,闭包不是ES6 中才有的,以前没有学好,这里再学习一下 */// 第一种解释 function 嵌套 function 时,内部的 function 可以访问 外部的 function 里的变量 function ff(x) {    var tmp = 3;    function f(y) {        console.log(x + y + (++tmp));    }    f(10);}ff(2); //16ff(2); //16// 这样不管执行多少次 都会console.log()出 16 ,因为bar 能访问 的参数tmp 也都能伪证问 x // 但是这还不是闭包,当我把function 里的function return 回来的时候,才是一个闭包,function ffreturn(x) {    var tmp = 3;    return function(y) {        console.log(x + y + (++tmp));    }}var ffreturn1 = ffreturn(2);ffreturn1(10); //16ffreturn1(10); //17//这里的tmp 也可以看做从外部的function 中访问的变量  ,但是return 之后,就相当于,是其中的副本// 那问题来了,js 处理 object 时是用到引用传递的,那么,你调用foo 时,传递一个object ,foo 函数return 的闭包也会引用 最初那个objectfunction fobject(x) {    var tmp = 3;    return function(y) {        console.log(x + y + tmp);        x.memb = x.memb ? x.memb + 1 : 1;        console.log(x.memb);    }}var age = new Number(2);var bar = fobject(age);bar(10);
原创粉丝点击