摘要:闭包个人理解就是把内部函数变量什么的暴露出去,使在外部可访问。比如闭包的作用域中保存元素时,以为这钙元素将无法被销毁,这时,可以把该对象的副本,加入是保存在变量中,然后闭包结束时,把置为空谨记闭包会应用包含函数的整个活动对象
闭包
个人理解就是把内部函数、变量什么的暴露出去,使在外部可访问。闭包至少有两个函数,一个外部函数,一个内部函数
红皮书中关于闭包讲的很详细,看过了在这里做个记录:
闭包与变量
闭包只能取得包含函数中任何变量的最后一个值,因为闭包所保存的是整个变量,而不是某个特殊变量
function creatFunctions(){ var result=new Array() for(var i=0;i<10;i++){ result[i]=function(){ return i } } return result; }
这段代码返回的每个值是10,而不是看起来的1,2,3........,再看下面的代码:
function creatFunctions(){ var result=new Array() for(var i=0;i<10;i++){ result[i]=function(num){ return function(){ return num } }(i) } return result; }
发现不同了么,第二段代码中不是把闭包赋值给数组,而是定义一个匿名函数,传入参数,并立即执行。因为函数参数是按值传递,这样就可以遍历出1,2,3........
this
this的问题看了很久,也看了很多次,这里结合闭包说一下
注意:在全局函数中,this等于window,当函数被当做某个对象的方法调用时,this等于那个对象
var name="The Window" var object={ name:"hello", getNameFunc:function(){ return function(){ return this.name } } } alert(object.getNameFunc()())
在调用object.getNameFunc()()时,是两个括号,此时弹出的是The Window,猜猜为什么?
如果去掉括号,变成alert(object.getNameFunc())此时弹出的是
对,就是把里面的内容打印出来了,并没有调用。内部函数在搜索this和arguments时,只会搜索到活动对象为止,因此这里永远不能打印出hello,可以把代码做这样的修改
getNameFunc:function(){ var _this=this return function(){ return _this.name } }
这样就能当问到hello,_this是我们在包含函数中特意声明的一个变量,所以闭包也可以访问
注:用es6的箭头函数也可以解决这个问题
是否会造成内存泄漏?
所谓的内存泄漏,是指IE9之前的版本对JScript对象和COM对象使用不同的垃圾收集历程,所以闭包在IE的这些版本中可能导致一些特殊的问题,这是可以解决的。
比如闭包的作用域中保存html元素时,以为这钙元素将无法被销毁,这时,可以把该对象的副本,加入是element.id保存在变量中,然后闭包结束时,把element=null置为空
谨记:闭包会应用包含函数的整个活动对象
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/93572.html
摘要:当在中调用匿名函数时,它们用的都是同一个闭包,而且在这个闭包中使用了和的当前值的值为因为循环已经结束,的值为。最好将闭包当作是一个函数的入口创建的,而局部变量是被添加进这个闭包的。 闭包不是魔法 这篇文章使用一些简单的代码例子来解释JavaScript闭包的概念,即使新手也可以轻松参透闭包的含义。 其实只要理解了核心概念,闭包并不是那么的难于理解。但是,网上充斥了太多学术性的文章,对于...
摘要:回忆我一年前,虽然使用过很多,但却完全不理解闭包是什么。就算你,也会在循环完成时,输出次当然,不要以为主要的原因是延迟函数会在循环结束时才执行,不然我为什么会在闭包这一节用使用这个例子,哈哈。 前言 在了解闭包的概念时,我希望你能够有JavaScript词法作用域的知识,因为它会让你更容易读懂这篇文章。 感触 对于那些使用过JavaScript但却完全不理解闭包概念的人来说,理解闭包可...
摘要:同步异步回调傻傻分不清楚。分割线上面主要讲了同步和回调执行顺序的问题,接着我就举一个包含同步异步回调的例子。同步优先回调内部有个,第二个是一个回调回调垫底。异步也,轮到回调的孩子们回调,出来执行了。 同步、异步、回调?傻傻分不清楚。 大家注意了,教大家一道口诀: 同步优先、异步靠边、回调垫底(读起来不顺) 用公式表达就是: 同步 => 异步 => 回调 这口诀有什么用呢?用来对付面试的...
阅读 1629·2019-08-30 15:54
阅读 2374·2019-08-30 15:52
阅读 2047·2019-08-29 15:33
阅读 3042·2019-08-28 17:56
阅读 3236·2019-08-26 13:54
阅读 1675·2019-08-26 12:16
阅读 2449·2019-08-26 11:51
阅读 1644·2019-08-26 10:26