刚看到,记笔记
在 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 会一直保存到内存中,所以这种写法满足了闭包的条件。
原项目地址:
暂无评论