闭包是指一个引用了另一个函数作用域中变量的函数,由于 JS 中作用域的特性,闭包常用于嵌套函数。
保存性是指闭包函数所访问的那些变量不会立即被清除,这是由于 IE6、7 所使用的内存回收机制导致的。
PS:IE6、7 所使用的引用计数垃圾回收机制介绍
引用计数回收算法通过变量是否被引用决定是否回收,而非直观上的回收无用的变量。
由于闭包函数引用了外部作用域中的变量,所以这些变量不会被立即清除,而是会保存在内存中,这也是导致内存泄漏的原因。
保护性是指闭包函数内定义的变量不会污染外部作用域中的变量,这是由于 JS 的原型链导致的。
PS:原型链介绍
访问一个变量时,首先会在当前作用域中进行查找,如果当前作用域中没有该变量,则向上级作用域中进行查找,就这样递归向上,直到找到,如果找不到,则为 null。
高阶函数是指返回另一个函数的函数,例如:只执行一次函数 (once
)、节流 (throttle
)。
function once(fn) {
let isFirst = true;
return function () {
if(!isFirst) return;
fn();
isFirst = false;
}
}
function throttle(fn, delay) {
let timer = null;
return function () {
if (timer) return;
timer = setTimeout(() => {
fn();
timer = null;
}, delay);
};
}