关于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
这下子,忤逆子的阴谋得逞了!
关于闭包的应用,我会逐渐更新到博客的!!