中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中的變量聲明怎么理解

發布時間:2022-02-05 17:28:54 來源:億速云 閱讀:120 作者:柒染 欄目:開發技術

這篇文章的內容主要圍繞JavaScript中的變量聲明怎么理解進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

    變量

    ECMAScript中,變量可以保存任何類型的數據(既可以是字符串也可以是數組也可以是別的),也即“松散的”,變量只是一個用來區分的占位符,一共有var、const、let三個關鍵字用于聲明變量(var在ECMAScrip所有版本可用,后兩個只在ES6及以后可用)。

    (一)var

    var a;//僅定義
    var b=‘hi';//定義的同時,設置值

    要注意的是,值的設置可以覆蓋,但我們不推薦這么做

    var a=”hello”
    a=”hi”

    ECMAScript的變量是“松散”的,那么可以用一條語句來對不同的數據類型初始化的聲明,當然插入、換行不是必要的,只是一定要用逗號隔開不同的變量。

    Var a=“hello”,
        b=12,
        c=false;
    1)關于var聲明的變量的作用域
    function test(){
        var a="shanxi";
    }
    test();//調用函數
    console.log(a);
    //ReferenceError: a is not defined
    //報錯:a未定義

    變量在使用var定義時,若是在函數內部,則該變量在函數退出時將會被銷毀,無法再調用。這里的a在函數test內部使用var完成定義,調用函數test之后,隨即a便被銷毀,因而出現如上報錯。

    當省略關鍵詞var時,這樣定義的變量將成為全局變量(不過不建議這么做,太多的全局變量會讓程序變得難以維護)

    function test(){
        a="sichuan";
    }
    test();//調用函數
    console.log(a);
    //sichuan
    2)var聲明提升(hoist)

    如下,結果是undefined而并沒有報錯,是因為,使用var關鍵字聲明的變量,會自動提升到函數作用域的頂部。也就是,會被ECMAScript看作

    function test(){
       console.log(a)
       var a=12;
    }
    test()
    //undefined

    也就是,會被ECMAScript看作

    function test(){
       var a; 
       console.log(a)
       a=12;
    }
    test()
    //undefined

    這種“提升”,會把所有變量的聲明都提到函數作用域的頂部。

    (二)let

    Let和var作用相似,只是let聲明的范圍是塊作用域,var聲明的范圍是函數作用域

    例如如下的if語句中的{}就是一個“塊”,而不是一個函數作用域。

    if(true){
        var b="zhang"
        console.log(b);//zhang
    }
    console.log(b);//zhang

    換成let:

    if(true){
        let b="zhang"
        console.log(b);//zhang
    }
    console.log(b);//ReferenceError: b is not defined

    此時b在if外邊(定義b的塊作用域外)便不能被引用。

    !!!注意:塊作用域是函數作用域的子域(是前者不一定是后者是后者不一定是前者)。

    !!!注意:適用于var的作用域限制,對let是等同的(只是一個作用域是函數作用域一個是塊作用域)。

    關于重復聲明,var不報錯而let會報錯,看如下實例:

    var a=24;var a=12;var a=5;console.log(a);//5let b=2;let b=4;//SyntaxError: Identifier 'b' has already been declared//運行到此處就已經報錯let b=8;console.log(b);var a=24;
    var a=12;
    var a=5;
    console.log(a);//5
    let b=2;
    let b=4;//SyntaxError: Identifier 'b' has already been declared
    //運行到此處就已經報錯
    let b=8;
    console.log(b);

    關于嵌套使用,JavaScript會記錄用于變量聲明的標識符以及其所在塊的作用域,所以在嵌套使用時,不會報錯(因為在同一塊作用域中沒有重復聲明)。

    var a="shanxi"
    console.log(a);//shanxi
    if(true){
        var a="sichaun";
        console.log(a);//sichuan
    }
    let b=3;
    console.log(b);//3
    if(true){
        let b=5;
        console.log(b);//5
    }

    所以,let和var區別只在于,二者決定所聲明的變量的相關作用域存在。

    var a;
    let a;//SyntaxError: Identifier 'a' has already been declared
    let c;
    var c;//SyntaxError: Identifier 'c' has already been declared
    1)與var不同,let聲明的變量不會再作用域中被提升,這一現象被稱為“暫時性死區”
    console.log(a);
    var a=2;//undefined
    console.log(b);
    let b=3;//ReferenceError: Cannot access 'b' before initialization
    2)全局聲明

    Var在全局作用域中聲明出的變量自動會成為window對象的屬性,但let不會

    var a=3;
    console.log(window.a)//a
    let b=10;
    console.log(window.b);//undefined

    不過let聲明出的變量,依舊是全局作用域發生的(不然也不會是“undeifned”),變量也會在頁面的生命周期內存續,所以必須保證頁面不會重復聲明同一個變量

    (三)Const

    基本上和let相同,只是使用const時,必須同時初始化變量,且嘗試修改const聲明的變量時會報錯

    const n="zhang";
    n="li";//TypeError: Assignment to constant variable.
    const a=12;
    const  a=9;//不可以重復聲明
    //SyntaxError: Identifier 'a' has already been declared

    當然,const有關聲明的限制,只適用于它指向的變量本身的引用,也就是說,若為一個對象,那么修改這一對象內部屬性,不會違反const有關的限制。

    const house={};

    house.name=”myhouse”;

    那么,在let和const出現之后,許多開發者不再很多地使用var了,多使用let和const,使得變量有了明確的作用域、聲明位置以及不變的值。

    感謝你的閱讀,相信你對“JavaScript中的變量聲明怎么理解”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    磐石市| 彩票| 前郭尔| 贞丰县| 金山区| 佛冈县| 长武县| 方城县| 山阳县| 齐齐哈尔市| 泉州市| 绥阳县| 常山县| 三亚市| 扎赉特旗| 南丹县| 宜丰县| 韶关市| 新竹市| 保德县| 江山市| 应城市| 闽清县| 明光市| 永城市| 武穴市| 安阳县| 白山市| 通辽市| 瓮安县| 陆丰市| 黄山市| 东乡族自治县| 灌云县| 师宗县| 芦山县| 金华市| 牡丹江市| 五常市| 南川市| 霍城县|