国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES6指北【1】——let、const

張春雷 / 1694人閱讀

摘要:如何學(xué)習(xí)的學(xué)習(xí)順序以此類推沒學(xué)好就別想學(xué)好邊學(xué)邊用學(xué)了就要用變量聲明的方式上面兩個(gè)是的語法,下面兩個(gè)是的語法塊級作用域看會(huì)聲明一個(gè)全局變量嗎顯然當(dāng)聲明了全局變量后,是無法再聲明全局變量的,只能對其賦值結(jié)論含義不明的問題下面的代碼不會(huì)執(zhí)

1.如何學(xué)習(xí)ES6 1.1 js的學(xué)習(xí)順序

ES5 -> ES6 -> ES7 -> ES8 以此類推

ES5沒學(xué)好就別想學(xué)好ES6
1.2 邊學(xué)邊用

學(xué)了就要用

2.變量聲明的方式
    a = 1
    var a = 1
    // 上面兩個(gè)是ES3的語法,下面兩個(gè)是ES6的語法
    let a = 1
    const a = 1
2.0 塊級作用域 {}

看mdn

2.1 a = 1 會(huì)聲明一個(gè)全局變量 嗎?
    var a

    function fn1() {
        var a
        fn2

        function fn2() {
            a = 1
            console.log(window.a) // undefined
        }
    }

    fn1()

顯然 當(dāng)var聲明了全局變量后,a = 1 是無法再聲明全局變量的,只能對其賦值
結(jié)論:a = 1 含義不明

2.2 var 的問題
    function fn() {
        if (true) {
            console.log(a) // undefined
        } else {
            // 下面的代碼不會(huì)執(zhí)行
            var a
            console.log(a)
        }
    }

    fn()

哪怕var沒有被執(zhí)行,變量也會(huì)被提升
也就是說 var聲明的變量沒有塊級作用域 , 而js程序員為了讓var有塊級作用域,通常使用的方式是立即執(zhí)行函數(shù)

所有的var建議寫在第一行 —— 《js語法精髓》
2.3 let 2.3.1 let的由來

下面我我們來寫段代碼
目的是只暴露一個(gè)全局變量 blues
用var來寫
1.需要一個(gè)立即執(zhí)行函數(shù) 2.需要一個(gè)函數(shù)把a(bǔ)包起來

    (
        function () {
            var a = 1

            window.blues = function () {
                console.log(a) // 1
            }
        }
    )()

用let來寫

    {
        let a = 1
        window.blues = function () {
            console.log(a) // 1
        }
    }
    blues()
    console.log(a) // a is not defined

let 的特點(diǎn)

let的作用域在最近的 {} 之間

let不能重復(fù)聲明【。。就算用var也不會(huì)有人重復(fù)聲明把^_^】

使用let聲明的變量在塊級作用域內(nèi)能強(qiáng)制執(zhí)行更新變量【看mdn最后一個(gè)for循環(huán)例子】

let的臨時(shí)死區(qū)【temp dead zone】—— 如果你在 let a 之前使用a,報(bào)錯(cuò)

    {
        let a = 1
        {
            console.log(a) // a is not defined
            let a = 2
        }
    }
    // 這培養(yǎng)了我們一個(gè)好習(xí)慣 —— 所有的變量聲明都要寫在前面
test
if (true) {
    let a = 1
} else {
    let a = 2
}
console.log(a) // ???

// answer:a is not defined

簡單理解let —— let就看它在哪個(gè)花括號里

2.4 const

const和let一樣,只有一個(gè)區(qū)別 —— 只有一次賦值機(jī)會(huì),且必須在聲明的時(shí)候就賦值
const:英文意思 常量 —— 固定一個(gè)值

    {
        const a = 1
        console.log(a) // 1
        a = 2
        console.log(a) // 報(bào)錯(cuò) —— Assignment to constant variable.[給常量賦值(是錯(cuò)的)]
    }
用const的情況
    {
        const PI = 3.1415926
    }
3.let的擴(kuò)展

用let解決for循環(huán)中onclick問題

HTML部分
  • 導(dǎo)航1
  • 導(dǎo)航2
  • 導(dǎo)航3
  • 導(dǎo)航4
  • 導(dǎo)航5
  • 導(dǎo)航6
JS部分

先看用var來寫

    var liTags = document.querySelectorAll("li")

    for (var i = 0; i < liTags.length; i++) {
        // 使用立即執(zhí)行函數(shù),var j 就不會(huì)跑到外面去(不會(huì)被提升)
        (function () {
            var j = arguments[0]
            liTags[j].onclick = function () {
                console.log(j)
            }
        })(i)
    }

mdn的寫法

    for (let i = 0; i < liTags.length; i++) {
        // 注意i的作用域就在上面的 () 里
        // 不過for循環(huán)在使用let的時(shí)候自動(dòng)做了一個(gè)魔法
        // let j = i // js自動(dòng)加的

        // 過程是這樣的
        // 下面這3行代碼執(zhí)行之前 —— 塊里面的i = ()里面的i
        liTags[i].onclick = function () {
            console.log(i)
        }
        // 上面3行代碼執(zhí)行后 —— ()里面的i = 塊里面的i
    }

如果我的解釋你看不懂的話,希望你能看懂下面的代碼

    for (var _i = 0; _i < liTags.length; _i++) {
        let j = _i
        liTags[j].onclick = function () {
            console.log(j)
        }
    }
4.永遠(yuǎn)別再用var了:)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107509.html

相關(guān)文章

  • ES6指北1】——letconst

    摘要:如何學(xué)習(xí)的學(xué)習(xí)順序以此類推沒學(xué)好就別想學(xué)好邊學(xué)邊用學(xué)了就要用變量聲明的方式上面兩個(gè)是的語法,下面兩個(gè)是的語法塊級作用域看會(huì)聲明一個(gè)全局變量嗎顯然當(dāng)聲明了全局變量后,是無法再聲明全局變量的,只能對其賦值結(jié)論含義不明的問題下面的代碼不會(huì)執(zhí) 1.如何學(xué)習(xí)ES6 1.1 js的學(xué)習(xí)順序 ES5 -> ES6 -> ES7 -> ES8 以此類推 ES5沒學(xué)好就別想學(xué)好ES6 1.2 邊學(xué)邊用 ...

    tain335 評論0 收藏0
  • ES6指北【3】——5000字長文帶你徹底搞懂ES6模塊

    摘要:模塊什么是模塊什么是模塊化玩過游戲的朋友應(yīng)該知道,一把裝配完整的步槍,一般是槍身消音器倍鏡握把槍托。更重要的是,其它大部分語言都支持模塊化。這一點(diǎn)與規(guī)范完全不同。模塊輸出的是值的緩存,不存在動(dòng)態(tài)更新。 1.模塊 1.1 什么是模塊?什么是模塊化? 玩過FPS游戲的朋友應(yīng)該知道,一把裝配完整的M4步槍,一般是槍身+消音器+倍鏡+握把+槍托。 如果把M4步槍看成是一個(gè)頁面的話,那么我們可以...

    ygyooo 評論0 收藏0
  • ES6指北【6】——詳談解構(gòu)賦值【附贈(zèng)練習(xí)題】

    摘要:指北詳談解構(gòu)賦值附贈(zèng)練習(xí)題一何謂解構(gòu)賦值基本概念首先我們看一下給的定義解構(gòu)賦值語法是一個(gè)表達(dá)式,這使得可以將值從數(shù)組或?qū)傩詮膶ο筇崛〉讲煌淖兞恐袕亩x中,我們可以發(fā)現(xiàn)解構(gòu)賦值的作用是對變量進(jìn)行賦值主要通過兩個(gè)方面實(shí)現(xiàn)這個(gè)作用數(shù)組將數(shù)組中的 ES6指北【6】——詳談解構(gòu)賦值【附贈(zèng)練習(xí)題】 一、何謂解構(gòu)賦值? 1. 基本概念 首先我們看一下MDN給的定義 解構(gòu)賦值語法是一個(gè) Javasc...

    sorra 評論0 收藏0
  • ES6指北【4】——ES6的函數(shù)參數(shù)處理,超乎你想象

    摘要:參數(shù)搭配的變量是一個(gè)數(shù)組,該變量將多余的參數(shù)放入數(shù)組中。從上面的概念中,我們至少可以知道如下三個(gè)信息語法變量。 一、函數(shù)的默認(rèn)參數(shù)值 1. ES6之前,我們?nèi)绾螌?shí)現(xiàn)函數(shù)默認(rèn)參數(shù) 1.1 方式一:使用邏輯運(yùn)算符【||】 function test(x) { x = x || 默認(rèn)值 // 使用||設(shè)置默認(rèn)值 console.log(x) } test() // 默認(rèn)值 但這樣...

    Pandaaa 評論0 收藏0
  • ES6指北【2】—— 箭頭函數(shù)

    摘要:箭頭函數(shù)基本語法函數(shù)語法具名函數(shù)匿名函數(shù)三句話第一句話聲明第二句話聲明匿名函數(shù)第三句話把匿名函數(shù)賦值給箭頭函數(shù)語法特點(diǎn)只能做賦值,不能做聲明第一種寫法完全寫法不省略參數(shù)個(gè)數(shù),不省略函數(shù)體花括號參數(shù)個(gè)數(shù)函數(shù)體內(nèi)語句個(gè)數(shù)第二種寫法省略參數(shù)括號參 1.箭頭函數(shù)基本語法 1.1 ES3 函數(shù)語法 // 具名函數(shù) function xxx(arg1, arg2) { console.lo...

    DobbyKim 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<