闭包理解(笔记)

刚看到,记笔记

在 Javascript 中,如果一个对象不再被引用,那么这个对象就会被 GC 回收,否则这个对象一直会保存在内存中。

function A() {
     varcount = 0;
     function B() {
        count ++;
        console.log(count);
     }
     returnB;
 }
 varC = A();
 C();// 1
 C();// 2
 C();// 3

B定义在A中,则B依赖于A,然后变量C引用了B,则 间接引用了A,所以A函数执行完不会被回收

常用写法

立即执行函数

两部分:(function(){}) 和() 。

第1个() 是一个表达式,而这个表达式本身是一个匿名函数,所以在这个表达式后面加 () 就表示执行这个匿名函数。

(function (document) {
     varviewport;
     varobj = {
         init: function(id) {
            viewport = document.querySelector('#'+ id);
         },
         addChild: function(child) {
             viewport.appendChild(child);
         },
         removeChild: function(child) {
             viewport.removeChild(child);
         }
     }
     window.jView = obj;
 })(document);

obj 是在函数 f 中定义的一个对象,这个对象中定义了一系列方法, 执行window.jView = obj 就是在 window 全局对象定义了一个变量 jView,并将这个变量指向 obj 对象,即全局变量 jView 引用了 obj . 而 obj 对象中的函数又引用了函数 f 中的变量 viewport ,因此函数 f 中的 viewport 不会被 GC 回收,viewport 会一直保存到内存中,所以这种写法满足了闭包的条件。 

原项目地址:

https://www.cnblogs.com/onepixel/p/5062456.html

暂无评论

发表评论

您的电子邮件地址不会被公开,必填项已用*标注。

相关推荐