作用域🎈
😀全局作用域
在全局中声明的变量;
😀局部作用域(函数作用域,块作用域)
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.let和const不存在变量提升;