javascript的垃圾回收原理
(1)、在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收;
(2)、如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。
什么是闭包
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量
那么使用闭包有什么好处呢?使用闭包的好处是:
1.希望一个变量长期驻扎在内存中
2.避免全局变量的污染
3.私有成员的存在 模块化代码。减少全局变量污染
使用闭包有一个优点,也是它的缺点,就是可以把局部变量驻留在内存中,可以避免使用全局变量。全局变量在每个模块都可调用,这势必将是灾难性的。
闭包由三个特性
1.函数嵌套函数(对象也是函数)
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
嵌套函数的闭包:
function aaa(){
var a=1;
return function(){
console.log(a++);
}
}
var fun =aaa();
fun();//1 执行后 a++,,然后a还在~
fun();//2
fun=null;//a被回收
闭包会使变量始终保存在内存中,如果不当使用会增大内存消耗。
var abc = (function(){ //abc为外部匿名函数的返回值
var a = 1;
return function(){
a++;
alert(a);
}
})();
abc(); //2 ;调用一次abc函数,其实是调用里面内部函数的返回值
abc(); //3
私有成员的存在
参考:https://www.cnblogs.com/anxiaoyu/p/6533426.html
闭包就是设置 私有变量 当页面消除后 还能进行 访问 例如 vue 私有变量, 现在的私有数据不让外外面的数据 访问私有数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var a = 0, b = 0;
function add() {
a++;
return a;
}
var bdd = (function () {
var b = 0;
var c = function () {
b++
return b;
}
return c
})()
console.log(add())
console.log(add())
console.log(add())
console.log(add())
console.log('----------------')
console.log(bdd())
console.log(bdd())
console.log(bdd())
console.log(bdd())
</script>
</body>
</html>