JavaScript闭包(closure)

闭包(closure)

闭包是javascript语言的一个难点,须要有足够的逻辑思惟能力。javascript

1、变量的做用域

变量分为两种:全局变量和局部变量。java

1.在函数内部是能够直接读取到全局变量的,以下:闭包

var  n = 10;
function fn(){
        alert(n);
}
fn();

alert结果为10.

2.在函数外部确定是没法读取到函数内的局部变量的,以下模块化

function f(){
    var n = 20;
}
f(); alert(n); 程序会报错:n is no defined.

注意:你们在这个地方须要注意是,在函数内部声明变量的时候,必定加var。若是不加,至关于声明了一个全局变量。函数

2、如何在外部能够读取到局部变量了。

咱们这里就引入这个闭包,来实现,就是在一个函数内在引入一个函数。性能

function f1(){
    var n = 10;
    function f2(){
        alert (n);
    }
    return f2;
}
var result = f1();
result();  
结果就为:10

3、什么叫闭包

闭包:就是可以读取其它函数内部函数的变量。学习

其实能够简单的理解为:定义在一个函数内部的函数,像好比上面例子中的函数f2()。spa

闭包在本质上就是将函数内部和函数外部链接在一块儿的桥梁。code

4、闭包的用处

1.能够读取函数内部的变量。blog

2.变量持久化(变量的值始终会保存在内存中)。

function f1(){
    var n = 10;
    return function(){
        n++;
        alert(n);
    }
}
var result = f1();   //外部函数赋给变量result;
result();  //result函数第一次执行,结果为11;
result();  //result函数第二次执行,结果为12,实现了累加,

上面这个例子就完美诠释了变量的持久化。

3.模块化代码,减小全局变量的污染。

 

var abc = (function(){   //abc为外部匿名函数的返回值
    var a = 1;
    return function(){
        a++;
        alert(a);
    }
})();
abc();  //2 ;调用一次abc函数,实际上是调用里面内部函数的返回值  
abc();  //3

 

5、使用闭包应注意的问题

1.因为闭包会使函数内部中的变量都保存在来,内存消耗很大。因此不能滥用闭包,不然会形成网页的性能问题。

 

6、最后告诉你们:其实闭包是Javascript语言的一个难点,也是它的特点,不少高级应用才会用到闭包,因此刚学的同窗不懂也不要着急,在之后的不断学习中,会慢慢理解的!

相关文章
相关标签/搜索