首页 > 代码库 > js闭包
js闭包
2017-03-23
文章来源:http://www.cnblogs.com/daysme
变量分为全局变量和局部变量。他们之前是用函数隔开的。除了函数,其他都没有作用域之说。全局变量:可重用。易被污染。局部变量:不会被污染,不能重用。闭包:既能重用变量,又能保护变量不被污染。 在函数内声明一个函数,并把这个函数返回出来。 闭包就是能读取其他函数内局部变量的函数。因为只有函数内部的子函数才能读取局部变量, 因为可以把闭包理解为定义在一个函数内部的函数。闭包的作用: 一个是可以读取函数内部的局部变量。 一个是让这些变量始终保存在内存中。全局变量var n=1;function fn(){ console.log(n);}fn();局部变量function fn(){ var n=1;}fn();console.log(n); //获取不到变量,并报错返回变量-最初的闭包思想function fn(){ var n=1; return 1;}var a=fn();console.log(a);闭包,其实就是一种函数。function fn(){ var n=1; return function(){ console.log(n) };}var a=fn();a();例子:function fn(){ var n=1; add=function(){ n++; } function fn1(){ console.log(n); //获取变量 } return fn1; //返回出来}var result=fn(); //保存到全局变量中result();add();result();此时 fn 中的局部就是一直保存在内存中,并没有在fn被调用后销毁。为什么没有被销毁?因为 fn1() 被返回出来并且由全局变量接收保存了,全局变量result是不会被销毁的,但result的值是fn1,fn1的值引用着 fn() 中的 n ,所以 fn 也不会被删除。闭包三个步: 1.外层函数包裹着受保护的变量和操作变量的内层函数。 2.外层函数把内层函数返回到函数外。 3.使用者调用外层函数,获得内层函数。 此时被返回出来的函数就叫闭包。闭包形成的原因: 外层函数的作为域对象无法释放。例,没用到上层函数的任何东西。var name=‘the window‘;var objcet={ name:‘my objcet‘, getname:function(){ return function(){ return this.name; } }}console.log(objcet.getname()());例, 指向obj的this 已经保存在内存中。var name=‘the window‘;var objcet={ name:‘my objcet‘, getname:function(){ var that=this; return function(){ return that.name; } }}console.log(objcet.getname()());
js闭包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。