1. 程式人生 > >javascript函數閉包(closure)

javascript函數閉包(closure)

分享 -1 閉包 ges 全部 javascrip 保存 cti scrip

一,首先感受下javascript函數的閉包

技術分享

技術分享

二,閉包

1,定義:閉包就是能夠讀取其他函數內部變量的函數,由於在javascript語言中,只有在函數內部的子函數才能夠讀取局部變量,因此可以把閉包簡單的理解成:定義在一個函數內部的函數,簡而言之,閉包起到了將函數內部與函數外部連接起來的橋梁作用

2,作用:1,可以讀取函數內部的變量;2,可以讓這些變量的值始終保存在內存中

3,註意點:1,首先因為閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以我們不能濫用閉包,否則會對網頁性能造成影響。在ie瀏覽器中可能會出現內存泄露。解決方法是在退出函數前將不使用的局部變量全部刪除

      2,閉包會在父函數外部改變父函數內部變量的值。所以,如果你把父函數當作對象使用,把閉包當做它的公共方法,把內部變量當作它的私有屬性。這時要註意不能夠隨便改變父函數內部變量的值。

三:練習

  var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      return function(){

        return this.name;

      };

    }

  };

  alert(object.getNameFunc()());

彈出 “the window” 因為此時的this指向的是瀏覽器window對象

  var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      var that = this;
      return function(){

        return that.name;
      };

    }

  };

  alert(object.getNameFunc()());

彈出 “my object” 因為此時this指向的是當前的object對象

javascript函數閉包(closure)