js的闭包,js的垃圾回收机制。
解决方案 »
- 没学过JS,图片加载弱智问题
- 代码中为什么要有return(1)?
- ext borderlayout 各布局的宽度问题
- javascript获得浏览器空白区域的高度?
- 不会createElement的使用,请来帮忙一下
- AJAX调用得到html 连接失效 问题?
- 请问如何用js判断客户端是简体还是繁体
- org.springframework.dao.InvalidDataAccessResourceUsageException:
- 急!如何判断客户端某一文件路径是否存在?(注意:是客户端路径的验证)
- 关于checkbox?
- change事件中显示loading图层失效
- 有关点击js点击事件深层问题求助
1.比如你有一个函数 var a = [1,2,3];
var b = 2;
function fn(){
var b= 10;
console.log(a);
console.log(b)
}
在这个代码里面,我们可以看到 在全局定义了一个变量为a 也就是在栈里面定了了一个a变量 他有一个内存地址指向与堆里面的[1,2,3],
这个时候 当你调用了fn(),这时 堆里面的fn函数会开辟一块临时的内存空间,里面也在临时的内存空间里面的栈中创建了一个变量b,我们在这片临时的内存空间中输出a,它这片区域是没有的,只能向外部查找,结果,找到全局的a的内存地址就会输出相应的值,也就是[1,2,3], 输出b,这时候临时内存空间里面有一个b变量,就会输出b,js里面有一个就近原则,所以此时输出的是10;,
2.当你调用完fn后,临时的内存空间与外界毫无关联,也就是不输出a这个过程,那么调用完fn这个函数,这片临时的内存空间就会被释放,反之,就相当于临时空间指向于全局的一个内存地址,这时候相当于闭包的产生,得不到释放.大概就是这么一个过程
你给的例子一般在code review的时候就被打回去重写了。全局变量 类成员变量 临时变量 命名规则定义好, 一般就不会出来这些问题了。