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

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

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

    隨筆 - 59  文章 - 70  trackbacks - 0
    <2008年10月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    •  

    積分與排名

    • 積分 - 173476
    • 排名 - 340

    最新評論

    閱讀排行榜

    評論排行榜

    上篇文章講了 js 中的一些概念(詞法結構) 數據類型(部分)。

    這章我們 繼續 . 然后了解下 js 中操作數據 函數的 作用域。

    ?

    1, 對象跟基本類型之間的轉換:

    不管何時,只是對象非空,在布爾環境中都為 true.

    ;

    new Boolean(false);

    new Number(0);

    new String(“”);

    new Array();

    上面雖然內部值是 false, 但對象的值是 true;

    Object à valueOf() à toString()

    其中 Date 類,是先執行 toString() 轉換。

    ?

    2,js 中操作一個數據值:

    任何語言都有自己的操作數據的方法;

    Js 也不例外, js 3 種重要的方式來操作一個數據值。

    1)?????? 復制它。例如把它賦給一個新的變量。

    2)?????? 把它作為參數傳遞給一個函數或方法。

    3)?????? 可以和其他值比較大小。

    ?

    Js 通過傳值和傳址 2 種方式操作這些數據的值。

    從名稱可以看處,傳值 是通過傳遞值來操作數據。在賦值的過程中,對實際的值進行了拷貝,存儲到一個新的變量中。拷貝的值和原來的值是 2 份完全獨立的值。所以如果你改變了拷貝的值,并不會影響原來的值。當比較大小時候,通常進行琢個字節比較。

    傳址 從名字來看,就是通過傳遞地址來操作數據。在賦值的過程中,對實際的值的地址(可以說是引用)進行了拷貝,他們不是完全的獨立,所以如果你通過引用改變了值,那么原始的值也會改變。當比較大小的時候,通常是看他們是否引用同一個地址來比較。

    簡單的傳址例子:

    var a = new Date();

    alert(a.getDate());

    var b = a ;

    b.setDate(21);

    alert(a.getDate()) // 輸出 21

    ?

    3, 一般來說:

    基本數據類型通過傳值來操作的。(如果忘記了哪些是基本數據類型,可以往回看。)

    對象數據類型通過傳址來操作的。(比如 數組和函數)

    例子:

    <script>

    // 傳值

    a=1;

    b=a;

    b=2;

    alert(a); // 輸出 1

    ?

    // 傳址

    x=[1,2];

    y=x;? // 賦給 y 的只是 x 的一個引用,而不是 x 本身。數組已經在語句中被賦值了,執行過這段代碼后,仍舊只有一個數組對象,只不過我們有 2 個對他的引用了。

    y[0]=2;

    alert(x[0] +" | " +x[1]);? // 輸出 2 ?|? 2

    </script>

    其中我們必須注意字符串:

    js 中字符串是通過傳址來復制和傳遞的,而他們是通過傳值來比較的。

    對象和數組是用傳值來傳遞的,只不過傳遞的這個值實際是一個引用,而不是對象本身

    總結 :

    類型

    復制

    傳遞

    比較

    數字

    傳值

    傳值

    傳值

    布爾

    傳值

    傳值

    傳值

    字符串

    不可變

    不可變

    傳值

    對象

    傳址

    傳址

    傳址

    不可變:在 JS 中,沒有方法去改變字符串值的內容。

    對字符串來說,傳值還是傳址,意義不大。

    ?

    4, 垃圾收集機制:

    Js 中自動釋放內存。

    比如:

    var? s? =”heelo”;

    var? b?? = s.toUpperCase();

    s=b; // 運行到這里后, js 會自動檢測不再使用某個對象,因為 s=b 了,所以 js 會自動釋放字符串“ heelo ”所占的存儲空間。即我們不能再獲取原始的 “heelo” 值; .

    ?

    5 , javascript 變量:

    Js 是非類型的。它的變量可以放任何類型的值。

    ?

    變量的聲明:

    var? a? ;

    var? b? ;

    或者

    var? a , b ;

    或者

    var? a=0 , b=1 ;

    ?

    重復聲明 是合法的,

    如果 遺漏聲明 , js 會隱式的聲明該變量。當然隱式聲明的變量是全局變量

    ?

    6 , 變量的作用域:

    Js 2 種:全局和局部。

    從名字的定義可以知道,全局變量的作用域是全局性的。

    js 代碼中,處處都有定義。

    局部變量的作用域是局部的。

    在函數體內定義。

    ?

    同名的局部變量的優先級比同名的全局變量,下面的例子說明了這點:

    var a ="abc"; // 全局變量

    function check(){

    var a = "efg"; // 同名的局部變量

    document.write(a);

    }

    check(); //? 輸出 efg

    ?

    看一個比較經典的例子 :

    ? ?var scope = "global";

    ?function f(){

    ???? alert(scope); // 輸出 undefined

    ???????? ?var scope = "local";

    ???????? ?alert(scope); // 輸出 local

    }

    f();

    ?

    為什么第一個會輸出 undefined 呢?

    因為 js 規定當 局部變量和全局變量的名稱相同的時候,函數體內的同名全局變量會被隱藏

    那么剛才例子 實際 等價于:

    function f(){

    var scope;

    ?alert(scope);

    ???????? ?scope = "local";

    ???????? ?alert(scope);

    ?}

    f();

    OK ,如果你看懂了這個例子,說明你對局部和全局的一些區別稍微了解了。

    ?

    7 , 變量的作用域:

    從里到外:

    詞法作用域

    作用域鏈

    變量查找

    var x = 1;

    function f(){

    ? var y =2 ;

    ?function g(){

    ?? var z =3 ;

    }

    ?

    }

    調用 g() 對象 ; z =3 ;

    ?

    ?

    ?

    ?

    調用 f() 對象 ; y =2 ;

    ?

    ?

    ?

    ?


    全局變量 ? x = 1??

    在此定義了嗎?

    ????????

    ? ??????????

    獲得值

    ? 在此定義了嗎?

    ????????

    ? ??????????

    獲得值

    在此定義了嗎?

    ????????

    ? ??????????

    獲得值

    ? 未定義

    ?

    8 , 客戶端全局變量:

    ? 在客戶端 js 中, Window 對象代表瀏覽器窗口,他是一個全局對象。、

    比如 ; 我們常用的 parseInt() , Math() 都是 Window 對象定義的屬性。

    ?

    Js 允許多個全局變量的執行環境,每個環境有不同的全局對象。

    比如:客戶端 js 的每個獨立的瀏覽器窗口,或者同一窗口的不同幀。

    其中的代碼都運行在自己的執行環境中,具有自己的全局對象。

    當然可以使用 表達式 parent.frames[0].x ?; 來引用第一個幀中的全局變量 x? ; 這樣就把不同幀中的代碼聯系起來了。

    不過這里有安全性問題。

    ?

    總結 ;

    主要講了 傳值和傳址 函數的作用域

    對新手來說稍微難理解些。如果還有不懂,可以 google 搜索資料

    posted on 2008-10-13 15:19 JasonChou 閱讀(251) 評論(0)  編輯  收藏 所屬分類: html
    主站蜘蛛池模板: 免费无码国产V片在线观看| 无人在线观看免费高清视频| 午夜亚洲国产理论片二级港台二级 | 5555在线播放免费播放| 一级毛片高清免费播放| 亚洲精品国产精品| 亚洲精品白色在线发布| 亚洲日产无码中文字幕| 免费中文字幕一级毛片| 妞干网免费视频观看| 久久福利资源网站免费看| 免费无码H肉动漫在线观看麻豆| 深夜福利在线视频免费| 狼人大香伊蕉国产WWW亚洲| 亚洲国产精品成人精品小说| 久久久久久亚洲精品中文字幕| 久久久久噜噜噜亚洲熟女综合| 国产一级淫片视频免费看| 卡1卡2卡3卡4卡5免费视频| 午夜福利不卡片在线播放免费| 免费精品无码AV片在线观看| a视频在线免费观看| 国产特黄一级一片免费| 最好2018中文免费视频| 国产综合成人亚洲区| 亚洲av色香蕉一区二区三区| 亚洲精品无码永久在线观看男男| 亚洲av日韩av无码av| 亚洲国产精品网站久久| 亚洲国产中文在线二区三区免| 亚洲黄色在线观看视频| 亚洲精品韩国美女在线| 婷婷精品国产亚洲AV麻豆不片| 亚洲精品免费在线观看| 亚洲人成电影在在线观看网色| 亚洲AV日韩AV天堂久久| 久久久久久久亚洲Av无码| 亚洲国产av一区二区三区丶| 亚洲av永久无码精品三区在线4 | 1000部免费啪啪十八未年禁止观看 | 成人免费无码视频在线网站|