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

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

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

    于吉吉的技術博客

    建造高性能門戶網

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      65 隨筆 :: 6 文章 :: 149 評論 :: 0 Trackbacks
    今天在寫個一段js代碼出現了變量值出現異常的問題,把代碼做了提取,簡單的如下面

    <script>
    function a1(){
        
    var a = [{"name":"1"},{"name":"2"},{"name":"3"}];
        
    for(i=0;i<a.length;i++){
            alert(i
    +" first");
            a2(a[i]);
            alert(i
    +" second");
        }
    }
    function a2(obj){
        
    for (i in obj) {
        }
        
    return "hello";
    }
    </script>
    <body onload="a1();">


    在第一次alert(i)是 0 first
    在第二次alert(i)是 name second

    為什么會出現這樣的情況,明明在a2函數傳進去的是實參,并且也沒有對參數a[i]進行改寫
    在反復查看問題后發現是i變量的問題,在函數a1()中,i被定義成為了全局變量,而在函數a2()中,i又是一個全局變量,所以在a2的for (i in obj) 循環中i被重新賦值成"name"
    這個烏龍是沒有養成在一些臨時函數定義成局部變量造成的,特別是在一些for,while,if的操作中,臨時變量必須定義成局部變量否則會出現全局變量被改寫的情況。

    再回顧一下定義全局變量/局部變量的規則
    在函數外部,使用var,或直接使用變量,如var a=1;或 a=1; 就定義了全局變量
    在函數內部,直接使用變量,如a=1;也定義了全局變量
    在函數內部,使用var進行定義就是局部變量

    修改一下上面的代碼

    <script>
    function a1(){
        
    var a = [{"name":"1"},{"name":"2"},{"name":"3"}];
        
    for(var i=0;i<a.length;i++){
            alert(i
    +" first");
            a2(a[i]);
            alert(i
    +" second");
        }
    }
    function a2(obj){
        
    for (var i in obj) {
        }
        
    return "hello";
    }
    </script>
    <body onload="a1();">
    posted on 2011-06-02 16:11 陳于喆 閱讀(969) 評論(0)  編輯  收藏 所屬分類: web開發
    主站蜘蛛池模板: 麻豆国产精品入口免费观看| 无码国产精品一区二区免费I6| 免费乱码中文字幕网站| 中文字幕在线观看亚洲日韩| 最近免费中文字幕4| 亚洲啪AV永久无码精品放毛片| 免费无码看av的网站| 亚洲精品理论电影在线观看 | 在线观看特色大片免费网站| 国产偷窥女洗浴在线观看亚洲 | 亚洲综合图片小说区热久久| 亚洲黄色免费网址| 亚洲13又紧又嫩又水多| 韩国二级毛片免费播放| 国产精品亚洲а∨无码播放不卡| 男人的天堂亚洲一区二区三区 | 午夜毛片不卡高清免费| 含羞草国产亚洲精品岁国产精品 | 亚洲国产精品成人| 91免费国产视频| 亚洲精品**中文毛片| 免费高清资源黄网站在线观看| 午夜亚洲国产精品福利| 亚洲永久精品ww47| 亚洲精品免费在线视频| 久久精品国产亚洲av天美18 | 国产婷婷成人久久Av免费高清| 亚洲精品国产第1页| 日韩免费a级在线观看| 亚欧乱色国产精品免费视频| 久久精品国产亚洲AV高清热| 全免费A级毛片免费看网站 | 免费v片在线观看视频网站| 亚洲日本一线产区和二线产区对比| 亚洲&#228;v永久无码精品天堂久久 | 亚洲国产精品无码久久一区二区| 99精品一区二区免费视频| 亚洲日韩精品无码专区加勒比| 久久久久亚洲精品天堂久久久久久 | 一级中文字幕乱码免费| 久久精品国产亚洲AV无码偷窥|