作用域内存的销毁机制

堆内存:只要这个内存没有被任何变量占用,浏览器就会主动销毁他,其他的需要手动销毁```注意以后在做项目的时候遇到一个对象后面不用了,手动清空一下,让他的值赋值成null就可以了;


栈内存(作用域):
全局作用域:关闭浏览器的时候销毁,以后再做项目的时候尽量避免全局变量的使用
私有作用域:相同的函数每一次执行都会形成一个私有作用域,他们之间没有任何关系
1.立即销毁 函数没有返回值的,或者返回的内容没有被占用,那浏览器就会把它销毁
2.暂时不销毁:函数有返回值 返回了一个函数,这个函数接着就执行了,执行完了之后浏览器会抽时间销毁,(具体每个浏览器的机制不同)
3.不销毁:如果函数执行返回一个一个引用数据类型的地址一直被占用着,就不会销毁

function fn1(){
var n=1;
console.log(n++)
}
fn1();
fn1();
fn1();

function fn(){
console.log('销毁')}
fn();
这个函数执行完之后对外面没有什么影响就销毁了

function fn2(){
var n=0;
return function(){
console.log(n++)
  }
}
var f=fn2();

当一个函数私有作用域return返回一个函数时,被外界的变量接収,那这个私有作用域不会销毁

作用域不销毁这个概念主要使用在给元素绑定事件的时候

box.oncklick=function(){
var n=0;
console.log(n)
}
var oLis=document.getElementsByclassName("oUl")[0].getElementsByTagName("li");
for(var i=0;i<oLis.length:i++){
oLIs[i].onclick=(function (){
//作用域中的参数i是私有变量
return function (i){
console.log(i)}
)(i)}这个i传进去的是全局的i

i=0,先让自执行函数执行,形成一个私有作用域,先给参数赋值私有变量 i=0,oLis[0].onclick= function (){cosole.log(i)}
比如我去点击oLis[1];
把function (){console.log(i)}拿来执行,遇到变量i,不是私有的,我往上找,上一级f1,f1中有私有变量i=1,然后输出i

预解释时候不管条件是否成立,都进行预解释,但是函数只声明不定义,代码执行的时候,条件成立的话,先给函数定义

posted @ 2017-06-26 14:19  和盛商行  阅读(203)  评论(0编辑  收藏  举报