堆内存的销毁:(基本上是这两种销毁方式)
- 谷歌浏览器:定时清除,每隔一段时间就会通篇销毁一次。把JS中没有别用到的地址 销毁
- 火狐浏览器:计数清除,根据当前地址的引用个数来决定这个地址是否要被销毁
栈内存的销毁
- 全局作用域的销毁:只有当页面关闭时,才会销毁
- 私有作用域的销毁:只要函数的返回值是一个引用数据类型,那么这个作用域就不会被销毁
栈溢出 内存泄漏: 栈内存不够用
闭包(closure) 就是一个变量的保护机制
- 闭包首先是一个不销毁的作用域,用来保护变量、用来存储值
- 利用闭包,我们可以实现模块开发
- 但是,闭包不能多用,用多了容易引起内容泄漏
var obj = function(){
var a =100;
var f = function(){
console.log(a);
}
return {
a,//属性名和属性值,是一个单词的时候,我们可以简写成一个
f:f
}
}
console.log(obj)
this
箭头函数中,没有 this 和 arguments ; 箭头函数是把这两者当做了普通变量对待
- 箭头函数中的this 是指向了上级作用域的this,arguments 也是一样
-
this 就是函数的执行主体
- 事件绑定中的this就是当前绑定的元素
- 自执行函数中的this 是window
- 定时器中的this 也是 window
-
this指向是谁,我们可以通过看 点 的方式来确定;函数执行 点 前面是谁this就是谁,没 点 就是window
一些自己不太确定的东西
var obj = {
name:'珠峰',
age :9,
};
(function(obj){ // 这个obj是私有变量,只是空间地址和全局的obj一样。
obj.name='中国',
obj = {},//给私有变量重新赋值了一个新地址,和全局的obj没关系了
obj.age=5000,
console.log(obj.age);//5000
})(obj);
console.log(obj.name);// 中国
--------------------------
var a = {
x:1
};
var b = a;
b.y = a = { // 点 的优先级是最高的,那么就先给b增加一个y属性,值暂时为null,然后给y赋了一个qqq:123.再把a的地 址改变了 变成 {qqq:123}
qqq:123
};
console.log(a.x,b.x);