关于javascript的闭包

想要搞清楚闭包,必须先了解变量的作用域:全局(变量),局部(变量)。全局变量,不管你在哪里都可以直接读取:

var n = 123; 
function me(){
          alert(n); 
} 
me();//必然弹出 123

而在函数的内部定义一个变量,函数外部自然获取不到:

function me() {
     var n = 123;
}
alert(n);//报错

当然了,学过JS的都知道,如果在函数内部声明变量时,不用var,就相当于在外部声明了一个全局变量:

function me(){
   n = 123;
}
me();
alert(n);//  可以弹出 123,因为变量n其实是一个全局变量

那么有什么办法可以让我们在外部可以读取内部的变量呢?那就是闭包,说白了就是一种特殊的函数写法:首先在函数体内部再定义一个函数:

function me(){
    var n = 123;
   
     function you(){
         alert(n); //123  因为me 是 you的父函数,自然你是可以拿到你爸爸的财产的;
   }
}

这样的嵌套,体现了JS语言链式作用域的特征,也就是父函数(父对象)内的所有变量对于子函数是可见的,但是反过来就不行,好比一个忤逆子,接着在外部拿到内部的变量,只需要子函数被返回即可

function me(){
    var n = 123;
   
     function you(){
         alert(n); //123  因为me 是 you的父函数,自然你是可以拿到你爸爸的财产的;
   }

    return you;
}

var our = me();
our(); // 123

这下子,忤逆子的阴谋得逞了!

关于闭包的应用,我会逐渐更新到博客的!!

 

posted @ 2017-03-23 19:35  前端怎么着你了  阅读(155)  评论(0编辑  收藏  举报