闭包

一、

function a(){

  var b = 1;

  var c = 1;

  c++;

  function aa(){

    b++;

    alert('B:'+b);

    alert('C:'+c);

  }

  alert('外'+b)

  return aa

}

var aaa = new a();

aaa();

aaa();

这就是闭包!可以通过alert出的数值很好的理解,闭包造成的情况。

在aa()中,通过得到他的外部函数的b,造成b存在于内存中,并且b的生命周期和aa(),没有像c一样在a()执行完成后清除,而b与aa()这种形式就是闭包

闭包(Closure)这个词的意思是封闭,将外部作用域中的局部变量封闭起来的函数对象称为闭包。被封闭起来的变量与封闭它的函数对象有相同的生命周期。

二、

function Foo(){

  var name = 'fooname';

  var age = 12;

  this.getName = function(){

    return name

  }

  this.getAge = function(){

    return age

  }

}

var foo = new Foo();

foo.name; // => undefined
foo.age; // => undefined
foo.getName(); // => 'fooname'
foo.getAge(); // => 12
第一个例子和第二个例子原因一样,因为在Foo作用域外,所以不能取得其内部参数
而通过getName和getAge这种闭包形式,可能从Foo内部取得name和age的参数。

 

posted @ 2017-05-18 11:40  过去以后#5626  阅读(88)  评论(0编辑  收藏  举报