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

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

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

    令人驚奇的JavaScript面向?qū)ο?二)

    昨天談了作用域的問題,現(xiàn)在讓我們看看作用域在JavaScript的面向?qū)ο筇匦灾惺窃趺幢憩F(xiàn)的,其中會涉及到上下文的問題,這個也是我們需要好好去理解的。

    學(xué)習(xí)JavaScript面向特性的朋友可能會迷惑于JavaScript中所謂類聲明的方式。類似以下代碼:

    function WhatIam() {
    alert('I'm here');
    }

    你可以用它來聲明一個變量:

    test = new WhatIam();

    或者像函數(shù)一樣調(diào)用它:

    WhatIam();

    這時候我們完全puzzled了,它究竟是個什么東西? 我只能說,它是一個特殊的又讓人頭痛的東西。但是不要緊,只要我們能看清它是怎樣運作的,不怕它是神還是鬼。

    可能你在上面的代碼運行情況中看不出當(dāng)一個function用來聲明變量和作為函數(shù)調(diào)用,它除了返回值之外還有什么不同。但是通過接下來的一些例子,相信你會對這兩種用法會有更加深入的理解。

    首 先說說為什么一個function可以像類一樣來聲明一個變量?我是這樣理解的:任何function都是一個構(gòu)造函數(shù),你不需要定義類,而當(dāng)你聲明 function的時候,實際上已經(jīng)在定義一個類了。這樣看來,用function定義出來的函數(shù)實際上就是一個類的構(gòu)造函數(shù)了。

    =================這里觀摩一種神奇現(xiàn)象===================


    關(guān)于這個構(gòu)造函數(shù)我必須跟大家說明一種情況,在上一篇文章中我曾提到,在函數(shù)中聲明的變量,如果不加var關(guān)鍵字,那么它默認(rèn)是一個全局變量(也即window對象下的一個屬性)。然而在這樣的構(gòu)造函數(shù)中,卻存在一種特殊的情況(我至今都沒搞明白的神奇“失蹤”現(xiàn)象):

    function TestClass() {
    //你會發(fā)覺這是在定義一個全局變量
    val = 1;
    alert(val);
    //果然它是一個全局變量
    alert(window.val);
    };
    //調(diào)用TestClass構(gòu)造函數(shù)
    test = new TestClass();
    //再次驗證是一個全局變量
    alert(val);

    運行結(jié)果并沒有什么不妥,一切都在意料之中。然而下面這段代碼的運行結(jié)果卻絕對讓你目瞪口呆:

    function TestClass() {
    //我認(rèn)為我在定義一個全局變量
    val = 1;
    //正常顯示1
    alert(val);
    //居然是undefined!
    alert(window.val);
    //我僅僅是添加了以下代碼
    var val = 10;
    //顯示了10,這里比較好理解,就是局部變量作用域遮蓋了全局作用域
    alert(val);
    //依然是undefined
    alert(window.val);
    }
    //調(diào)用TestClass構(gòu)造函數(shù)
    test = new TestClass();
    //確實是undefined
    alert(val);

    看到這里你是不是已經(jīng)瘋狂了?我也是。最開始定義的val全局變量為何神奇失蹤?

    對于這種情況我也只是順帶提一下,希望引起大家注意,但是我并不能解釋為何出現(xiàn)這樣的現(xiàn)象,等待高人注解!!

    關(guān)于這個現(xiàn)象說一點我的看法就是:如果你聲明function的目的是定義一個類,就要盡量擯棄在其中使用全局變量的做法,這樣就可以避免上述現(xiàn)象的發(fā)生。

    posted on 2008-07-23 21:31 Jarod.cn.LuLuLife 閱讀(183) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    公告

    我的知識Blog!

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章檔案

    Image

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一区精彩视频| 亚洲一区二区三区无码国产| 麻豆69堂免费视频| 啦啦啦手机完整免费高清观看| 亚洲免费网站在线观看| 114一级毛片免费| 亚洲另类春色校园小说| 青娱分类视频精品免费2| 亚洲中文字幕久久精品无码A| 最近免费中文字幕大全视频 | 日本不卡免费新一区二区三区| 亚洲人成精品久久久久| 日韩精品在线免费观看| 亚洲美女中文字幕| 无码视频免费一区二三区| 国产亚洲精品第一综合| 激情综合色五月丁香六月亚洲| 在线观看特色大片免费网站| 91亚洲精品第一综合不卡播放| 国产成人免费高清激情视频| 亚洲AV性色在线观看| 不卡精品国产_亚洲人成在线| 日韩电影免费观看| 亚洲黄页网在线观看| 亚洲成A∨人片天堂网无码| 在线免费观看伊人三级电影| 久久亚洲AV成人出白浆无码国产| 成年女人毛片免费视频| 三级片免费观看久久| 无码久久精品国产亚洲Av影片| 国产成人精品免费午夜app | 久久精品免费观看| 亚洲精品9999久久久久无码| 国产成人99久久亚洲综合精品| 18禁美女裸体免费网站| 麻豆安全免费网址入口| 亚洲国产精品线观看不卡| 国产男女猛烈无遮挡免费视频网站| 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲AV无码一区二区二三区软件| 日本在线高清免费爱做网站|