作用域

71 阅读1分钟

作用域🎈

😀全局作用域

在全局中声明的变量;

😀局部作用域(函数作用域,块作用域)

1.函数作用域是在函数中声明的变量;

2.块作用域是在{}中声明的变量;

😀作用域链

 作用域链的本质是底层变量的查找机制。
 1.在函数被执行时,会优先在当前函数的作用域中查找;
 2.如果当前作用域找不到,会逐级查找父级作用域直至全局作用域;
 

😀垃圾回收机制

 全局变量在页面关闭时被回收,局部变量在不使用时被回收;
 
 内存泄漏:程序中分配的内存未被释放或无法释放称为内存泄漏;
 
 回收算法:
 1.引用计数法:计算对象被引用的次数,如果引用的次数为零就会被回收;
 2.标记清除法:从根部开始定时扫描对象,能找到的继续保留,找不到的被回收;
 

😀闭包

 1.闭包:在嵌套函数中,内层函数引用了外层函数的变量;
 function fn() {
     let a = 10;
     function fn2() {
         console.log(a);
     }
     fn2();
 }
 fn();
 
 2.作用:封闭数据,实现数据私有,延迟变量的生命周期(可能会引起内存泄漏),外部能够使用函数内部的变量;
 function fn() {
     let b = 1;
     function fn2() {
         console.log(b);
     }
     return fn2;
 }
 let outer = fn();
 outer();
 

😀变量提升

 1.var声明的变量有变量提升,且只提升声明,不提升赋值(不建议使用var声明变量);
 2.letconst不存在变量提升;