关于javascript的闭包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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

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

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

 

以上是关于关于javascript的闭包的主要内容,如果未能解决你的问题,请参考以下文章

关于javascript闭包与重构

关于JS闭包

关于Javascript闭包(Closure)

关于javascript闭包理解

关于闭包

关于javascript面向对象之闭包