js闭包

主宰稳场 提交于 2019-11-27 09:45:11

 

已下是自己阅读文档js高级程序设计后的知识点,在此记录,以便于之后温习

闭包

1.闭包是指有权访问另一个函数作用域中变量的函数。常见方式:在另一个函数中创建另一个函数

2.当函数被调用,会创建一个执行环境和作用域链,并将作用域链赋给一个内部属性[[Scope]]。然后用this,arguments,和其他命名属性来做活动对象。外部函数的活动对象位于第二位,再外层的位于第三位,直到作用域链的最外层为全局。

 

 

 3.作用域链的实质是指向变量对象的指针列表,它只引用但不实际包含变量对象。

4.一般情况下,函数执行完会销毁活动对象,但是有闭包的话,在函数执行完毕后,但是闭包还在使用该函数的活动对象,那么活动对象不会被销毁,将继续保存在内存中,直到闭包代码执行完毕,销毁。

5.闭包与变量

1).闭包的副作用:闭包只能取包含函数中任何变量的最后一个值。但是我们可与创建另一个匿名函数强制让闭包欣慰符合预期

6.this对象

闭包中的this对象通常指向window

var name="this is window";
        var obj={
            name:"this is obj",
            getName:function(){
                return function(){
                    return this.name;
                };
            }
        }
        alert(obj.getName()());//this is window

 

函数调用时,活动对象会自动获取this和argurments,不会直接访问外部函数的这两个变量,不过可以将外部作用域的this保存在闭包能访问的变量里面。

 

7.在IE的一些版本中,闭包作用域链中包含html元素,该元素无法销毁

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!