关于闭包的理解

闭包官方定义:闭包是指程序中有许多变量和绑定变量的执行环境。闭包

本人本身理解:程序的代码段容许存在一级函数而且一级函数不能被释放,一级函数没有释放以前,外部能够使用一级函数的局部变量。函数

进一步理解 : 闭包就是外部能够使用局部变量。spa

闭包的功能:一、外部能够使用局部变量。
      二、使函数不能释放。
闭包的缺点:外部会修改局部变量,会大量占用内存,内存不会被释放。code

为何一级函数不能被释放?
答:由于一级函数中有一个函数,这个函数使用了一级函数的变量,咱们返回了这个函数并建立一个变量接收了。那么这个函数就不会被js的垃圾回收机制销毁。blog

最经常使用的一种形式是函数做为返回值被返回内存

var F = function(){
    var b = 'local';
    var N = function(){
        return b;
    }
    return N;
}
console.log(F()());

一种变形的形式是将内部函数赋值给一个外部变量get

var inner;
var F = function(){
    var b = 'local';
    var N = function(){
        return b;
    };
    inner = N;
};
F();
console.log(inner());

闭包能够经过函数参数传递函数的形式来实现io

var Inner = function(fn){
    console.log(fn());
}
var F = function(){
    var b = 'local';
    var N = function(){
        return b;
    }
    Inner(N);
}
F();

咱们经过提供getter()和setter()函数来将要操做的变量保存在函数内部,防止其暴露在外部console

var getValue,setValue;
(function(){
    var secret = 0;
    getValue = function(){
        return secret;
    }
    setValue = function(v){
        if(typeof v === 'number'){
            secret = v;
        }
    }
})();
console.log(getValue());//0
setValue(1);
console.log(getValue());//1

使用闭包能够很方便的实现一个迭代器function

function setup(x){
    var i = 0;
    return function(){
        return x[i++];
    }
}
var next = setup(['a','b','c']);
console.log(next());//'a'
console.log(next());//'b'
console.log(next());//'c'

谢谢你们

相关文章
相关标签/搜索