堆内存的销毁
谷歌浏览器:定时消除,每隔一段时间,就会通篇销毁一次,把js中没有被用到的地址,销毁 火狐浏览器:计数消除,根据当前地址的引用个数来决定这个是否要被销毁
栈内存的销毁
全局作用域的销毁:只有当页面关闭的时候才会销毁 私有作用域的销毁,只要函数的返回值是一个引用数据类型,那么这个作用域就不会被销毁
栈溢出、内存泄漏就是栈内存不够用!!
闭包
闭包就是一个变量的保护机制,是一个不销毁的作用域,用来保护变量存储值,利用闭包我们可以实现模块化开发(业务中多人合作)
闭包能多用,用多了容易引起内存泄漏
this
箭头函数中的this是指上级作用域的this,this就是函数执行主体
事件绑定中的this就是当前绑定的元素,自执行函数和定时器中的this是window,this的指向是谁,我们可以通过看点的方式来确定;函数执行点前是谁this就是谁,没点就是window
var btns = document.querySelectorAll('button');
[...btns].forEach(item=>{
item.onclick = function(){
console.log(this)
}
});
(function(){
console.log(1,this)
})();
~function(){
console.log(2,this)
}();
!function(){
console.log(3,this)
}();
var obj = {
age:100,
f(){
console.log(this)
},
f2:function(){
},
f3:()=>{
console.log(this)
}
}
// obj.f === fn === ary[3]
obj.f() // obj.age
var fn = obj.f;
fn(); // window.age
var ary = [1,2,3,fn];
ary[3](); // ary.3()
obj.f3();// obj window
function fn2(){
return ()=>{
console.log(arguments)
}
}
fn2(1,2,3,4,5)()
setTimeout(function(){
console.log(this)// window
},2000)
```