阿孜去面试-闭包

199 阅读1分钟

Vox_splash.jpg

>> 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就会立刻回收内存

<< 基础还不错,就是说话啰里八嗦的。

>> 我很棒呢