js基础7(垃圾回收机制、闭包)

1、js的垃圾回收机制

  1. 浏览器自己做的
  2. 全局作用域声明的一个变量不会被回收,只有关闭浏览器才会回收
  3. 在局部作用域里面,变量在函数体执行完之后,就会被回收

2、闭包

1.可以访问别的函数作用域里面的变量或者参数的函数
2.创建闭包的方法:

一个函数里面嵌套一个函数,内部函数引用外部函数的变量或者参数,这里引用外部函数的变量不会被回收
  function fun (){
    var x = 1; // 在局部作用域里面,使用完之后就被回收
    console.log(x);
  }
fun();

var b = {
  a: 5,
  x: 10  
}
alert(b.x);
b = null; // 释放堆内存的方式

(function (){})(); // 这不是闭包,只是一个函数表达式的自执行

function fn (){
  let a = 10;
  return a; // 可以获取内部函数的变量,但不是闭包
}
var b = fn();
console.log(b);

var x = 1;
function fun1 (){
  var x = 10;
  return function (){
    x++;
    console.log(x);
  }
}
var y = fun1();
y(); // 这是一个闭包,y() = fun1()() 也就是返回的函数执行
/*
  1.编译
    var x;
    function fun1 (){}
    var y;
  2.执行阶段
    x = 1;
    y = fun1();
    y() = fun1()(); // 两次执行
*/
//闭包的用处
var aP = document.getElementsByTagName("p");
    len = aP.length;
for (var i=0;i

你可能感兴趣的:(js基础7(垃圾回收机制、闭包))