>> typeof不能检测其他引用对象,却可以识别function(虽然某些浏览器正则也会识别成function),既然它这么特殊,那你简单说说闭包吧。
嘿嘿,这能难得倒我吗
<< 在刚开始学js的时候就知道一句话,函数调用函数,变量无法释放就叫闭包,虽然当时不懂是什么意思,但每当你说出这句话时,面试官总会跳到下个问题。
<< 可以说的具体点吗,这句话我已经听的不想听了。天天不好好学,就知道背八股文。
>> 红宝书上说闭包指那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的。
// 这样就形成了一个闭包
function fn(e) {
return function () {
return e;
};
}
// 闭包可以保存一些信息
function fn(e) {
return function () {
return e;
};
}
const a = fn(123);
let b = a();
console.log(b);
b = 456;
console.log(b);
// 闭包的形成过程
// 由上至下执行,里面的函数使用了外面函数的活动对象(arguments等)
// 里面的函数还在用,外面的函数怎么能挂掉
// 但是这样的闭包多了,会占用很多内存
// 让闭包消失
function fn(e) {
return function () {
return e;
};
}
let a = fn(123);
let b = a();
console.log(b);
b = 456;
console.log(b);
a = null; // 浏览器看到null就会立刻回收内存
<< 基础还不错,就是说话啰里八嗦的。
>> 我很棒呢