首页 > 代码库 > js闭包
js闭包
闭包是js的一个特点,也是一个难(坑)点。我也研究闭包研究了一段时间,也有了一点收获,下面把我的收获分享给一下。
了解闭包前我们需要搞清楚变量作用域,就是全局变量和局部变量。
js中任何函数可以访问全局变量,但是局部变量除了访问自己内部的局部变量和自己上级的局部变量之外无法访问别的函数的局部变量。
function foo(){ var i=2; var n=3; var m=4; } function fun(){ alert(i,n,m); } fun(); //undefind,undefind,undefind
然而在开发当中我们往往需要访问别的函数的局部变量这改怎么办?
那就是函数里面写函数,这样里面的函数可以访问外面的函数的全部变量,而外面的函数访问不了里面函数的变量(这就是传说中的作用域链)
var par = parent(); par(); //12 function parent(){ var i=2; var n=3; var m=4; return function(){ i++; n++; m++; console.log(i+n+m); } }
然而这个parent函数里面的匿名函数就是传说中的闭包。
到这里看出来闭包其实就是能够访问其他函数局部变量的函数。
我这里写的例子有好几个变量i,n,m。为什么呢?因为之前拿一个变量写的例子有人质疑过用return不是可以得到?
确实一个变量的时候可以renturn出去,但是变量多了呢?
又有人说直接在parent函数中写对变量的操作,可以不用这么麻烦。
我把函数的调用放在前面是为了说明这个闭包可以在别的地方调用。
有一种情况就是参数只能在parent函数里面拿到,而这参数不能立即调用,需要在某个特定场合调用,这个时候就不能在parent函数中直接写对变量的操作了,最好的方法就是闭包。
js闭包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。