javascript闭包

163 阅读1分钟

闭包是一个函数里内嵌另外一个函数

用途:

1.闭包可以读取函数内部变量
2.将函数内部变量的值始终保存在内存中

应用场景:

1.函数作为返回值
2.函数作为参数被传递
function fn(){
        var a = 1;  
        return function(){
            a++;
            alert(a);
        }
    }
    var result = fn();
    result();
    result();
------------------
function fn(){
        var a = 1; /*注意该变量不能放在内部的函数里,否则会找不到a*/
        function g(){
            alert(a);
        }
        a++;
        g();
    }
    fn();
function factory(base){
        return function(x){
            var total = 0;
            for(var i = 1;i <= x;i++){ 
                total += i;   //1+2+3+4
            }
            console.log(total);  10
            return total + base;  10+3
        }
    }
}
var adder = factory(3);
alert(adder(4));
-----------------------------
<div id="1">1</div>
    <div id="2">2</div>
<div id="3">3</div>
for(var i = 1;i <= 3;i++){
        var oId = document.getElementById(i);
        oId.onclick = (function(id){
            return function () {
                alert(id);
            }
        })(i);
    }

优点:

1.提高了函数内部的变量的安全
2.让程序代码不臃肿
3.方便调用上下文局部变量

缺点:

太耗内存,不建议频繁使用,还会导致内存泄漏

2.jpg