闭包

1. 简介

   闭包是一种现象,一个作用域(包括全局作用域)可以访问另一个作用域(不包括全局作用域)中的变量

2. 形式

   一般是一个函数中返回一个函数

3. 作用

  • 外部外部可以访问函数内部成员
  • 让函数内部的成员始终存活于内存中 (函数执行完成后,函数内部的成员会被销毁,但是一旦发生闭包,就不会被销毁)

4. 比如

 function add() {
      var a = 1;
      return function() {
             return a;
      }
 }

 console.log(add()())  //结果为a的值: 1

5. 经典的闭包案例对比

  • 发生了闭包
 var name = 'zs';   // 等价于 window.name = 'zs'
       
 var obj = {
       name: 'ls',
       age: 18,
       getName: function() {
// 方法中this指向构造函数创建的实例对象
var that = this; return function() { return that.name; } } } console.log(obj.getName()()) // 结果为obj.name的值 ls
  • 未发生闭包
 var name = 'zs';   // 等价于 window.name = 'zs'
       
 var obj = {
        name: 'ls',
        age: 18,
        getName: function() {
             return function() {
        // 普通函数内部的this指向window,相当于返回的是 window.name
                    return this.name; 
                }
        }
  }

  console.log(obj.getName()())  // zs

 

posted @ 2018-06-08 19:20  点点点旺旺旺  阅读(122)  评论(0)    收藏  举报