js 闭包

2018-05-24  本文已影响4人  阿亮2019

原型链和闭包是每次笔试面试必考的内容。

什么是闭包

一个持有外部变量的函数,就会形成闭包。
lexical scope 词法作用域: 一个函数和这个函数所访问变量的环境综合

function adder() {
  let num = 0;
  function add() {
    console.log(++num);
  }

  return add;
}

const add = adder();
add();  // 1
add();  // 2

闭包的作用

  1. 希望一个变量常驻内存中,不会被垃圾机制回收。如上面一个例子,num变量没有被回收
  2. 私有化变量,避免被修改你无法直接改num值,只能通过add函数去增加

思考题:

var name = "The Window";
var object = {
  name : "My Object",
  getNameFunc : function(){
    return function(){
      return this.name;
    };
  }
};
alert(object.getNameFunc()());
var name = "The Window";
var object = {
  name : "My Object",
  getNameFunc : function(){
    var that = this;
    return function(){
      return that.name;
    };
  }
};
alert(object.getNameFunc()());

参考:
方应杭 知乎
MDN
阮一峰 闭包

上一篇 下一篇

猜你喜欢

热点阅读