<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    閉包和引用,this引用的簡單介紹……
    <script type="text/javascript">
    var a = "1";
    var b = a;
    b = "2";
    alert(a);
    //這里a是非對象,所以b = a 的時候,是把a引用的值拷貝了一份,然后直接給b,所以修改b的時候當然不會改變a
    var a = {};
    a.name = "w";
    var b = a;
    b.name = "c";
    alert(a.name);
    /*
    這里a是對象,所以b = a 的時候,是把a的引用copy了一份,然后給b,又因為修改b.name
    是通過b引用的對象,修改對象的成員,所以修改b.name的時候a也被修改了。。因為它們的引用相同即某無知的對象。。
    但是如果你直接b = xxxx,這樣就不會影響到a的引用對象,因為b的引用和a是一樣的,你只是把b的引用改變了,
    而不是通過b引用的對象去修改里面的成員。。。所以a的引用對象不會受到影響。。。

    */
    b = "wc";
    alert(a);
    /*
    下面介紹this的引用,this的引用是執行的那個函數 . 之前的對象比如。。。
    wc.func();
    這樣this的引用就指向wc
    如果是
    func();
    這種形式都可以認為是window.func();
    所以它們的this的引用自然就是window;
    下面小段code
    */
    window.name = "window";
    var a = {};
    a.name = "a";
    a.func = function () {
        alert(this.name);
    };
    a.func(); //a
    var b = {};
    b.name = "b";
    b.func = a.func; //這里是把a.func的那個函數的引用copy了一份給b.func
    b.func(); //b
    var c = a.func;
    c(); //window
    //關于引用的介紹到此:D
    </script>
    閉包:
    閉包其實就是執行一個函數后,資源不會釋放。。。
    一般是函數里提供了一些資源,當函數執行完畢后,這些資源外面還會用到(函數之外存在引用)
    嗯,我堅信code最有說服力。。。:D
    <script type="text/javascript">
    var a = function (i) {
        return function () {
            alert(i);
        };
    };
    var b = a("內容"); //這里i變量被保留了所以產生了閉包;
    alert(b);
    b(); //內容
    //下面介紹下prototype.js里的bind方法
    Function.prototype.bind = function () {
    //綁定事件
        var wc = this, a = $A(arguments), o = a.shift();
        return function () {
            wc.apply(o, a.concat($A(arguments)));
        };
    };
    /*
    $A方法,就是相當于Array.call(null, arguments),注意arguments對象不是數組對象,只不過它有length屬性和0-n屬性而已。。。
    又因為它有這些屬性,并且還可寫。。。所以可以用Array.call方法來改成數組
    其實就是等同于
    var $A = function () {
        for (var a = [], i = 0 ; i < arguments.length ; i ++) a[i] = arguments[i];
        return a;
    };
    var wc = this, a = $A(arguments), o = a.shift();
    這句就是把arguments轉換成數組給a.
    var wc = this;
    因為這個是原型-prototype(關于原型后面會有文章介紹)下的方法,所以,所有函數對象都會被繼承。。。
    可以測試下面代碼:
    */
    Function.prototype.wc = function () {
        alert(this);
    };
    var f = function () {
        alert(1);
    };
    f.wc(); //function () { alert(1); }
    //即

    Function.prototype.wc = function () {
        var wc = this;
        return function () {
            alert(wc);
        };
    };
    var n = f.wc();
    n(); //function () { alert(1); }
    /*
    wc.apply(o, a.concat($A(arguments)));
    */
    </script>


    下面展示一個很簡單的閉包實例:
    (以AJAX取的JSON數據后,生成表格,并在相應的td位置上增加onclick事件)
    var td_0 = document.createElement('td');
    td_0.innerHTML = _json[i]["group_name"]; 
    td_0.onclick = function (_i)
        {
         return function ()
         {
          getMember(_json[_i]["group_id"]);
         };
        }(i );

    posted on 2007-12-23 23:57 -274°C 閱讀(773) 評論(3)  編輯  收藏 所屬分類: web前端


    FeedBack:
    # re: JAVASCRIPT 與閉包[未登錄]
    2009-07-17 13:23 | test
    <script type="text/javascript">


    var a = function(_i)
    {
    return function()
    {
    alert(_i);
    }

    };

    a(10)();

    var b = function()
    {
    return function(_i)
    {
    alert(_i);
    }

    };

    b()(10);

    </script>  回復  更多評論
      
    # re: JAVASCRIPT 與閉包
    2009-07-23 09:35 | java-he
    循環給元素添加事件的方法除了上面的閉包,還有一種巧妙的方法。比如
    for(var i=1; i < 4; i++){
    var id = document.getElementById("a" + i);
    id.i=i;//這個i有了根
    id.onclick=function(){
    alert(this.i)
    };
    };
      回復  更多評論
      
    # re: JAVASCRIPT 與閉包
    2009-10-27 01:59 | -274°C
    根據《JavaScript 內存泄露》
    (http://m.tkk7.com/JAVA-HE/archive/2009/10/27/299856.html)
    這里總結,上面方法是有內存泄露的。  回復  更多評論
      

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊

    JAVA網站

    關注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914715
    • 排名 - 40

    最新評論

    主站蜘蛛池模板: 中文字幕久久亚洲一区| 国产成人青青热久免费精品| 亚洲国产精品一区二区久久hs| 成在线人直播免费视频| 亚洲国产成人久久综合区| 特级毛片爽www免费版| 亚洲人成无码久久电影网站| 成人午夜免费视频| 国产午夜亚洲不卡| 中文字幕无码毛片免费看| 亚洲AV无码久久| 91香蕉在线观看免费高清| 亚洲国产美女在线观看| 最近中文字幕mv手机免费高清| 亚洲欧美国产国产一区二区三区| 在线免费观看韩国a视频| 免费观看四虎精品成人| 亚洲午夜精品一级在线播放放| 丁香花在线观看免费观看图片| 亚洲国产精品无码久久一区二区 | 久久亚洲精品高潮综合色a片| 破了亲妺妺的处免费视频国产 | 亚洲AⅤ无码一区二区三区在线 | 亚洲国产精品99久久久久久| 破了亲妺妺的处免费视频国产| 曰批全过程免费视频免费看| 亚洲最大激情中文字幕| 69免费视频大片| 亚洲av永久中文无码精品综合| 免费jjzz在线播放国产 | 国产成人亚洲综合a∨| 亚洲一区二区三区偷拍女厕| 曰批全过程免费视频网址| 亚洲熟妇少妇任你躁在线观看| 亚洲伊人成无码综合网| 亚洲第一网站免费视频| 在线看亚洲十八禁网站| 4480yy私人影院亚洲| 日本特黄特黄刺激大片免费| 一个人免费视频在线观看www | 亚洲成a人片在线不卡一二三区 |