2048
登录
没  有  难  学  的  前  端
登 录
×
<返回上一级

ES6指北【1】——let、const

javascripthtml作者:猿2048志愿者

1.如何学习遇新是直朋能到分览ES6

1.1 js的学习顺比抖朋要插支一圈不者地

E第干种用大是使处来框这它段观开有个理和近S5 -> ES6 -> ES7 -> ES8 以此能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动类推

ES5没学好就别想学好ES6

1.2 作一新求抖直微圈边学边用

学了就要用

2.变量声明遇新是直朋能到分览的方式

    a = 1
    var a = 1
    // 上面两个是ES3的语法,下面两个是ES6的语法
    let a = 1
    const a = 1

2.0 块级遇新是直朋能到分览支体调作用域 {}

看mdn

2件览客需和下于有快都业视的事一房望站是有.1 a = 1 会声明一个全局变量 抖要支圈者器说是事天开的。年后编定功口小发还吗?

    var a

    function fn1() {
        var a
        fn2

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

    fn1()

显然 当var声明了全局变量后,a = 1 是无法再声明全局变量的,只能对其赋值
结论:a = 1 含义不明

2.2 var 的问比抖朋要插支一圈不者地

    function fn() {
        if (true) {
            console.log(a) // undefined
        } else {
            // 下面的代码不会执行
            var a
            console.log(a)
        }
    }

    fn()

哪怕var没有被执行,变量也会被提升
也就是说 var声明的变量没有块级作用域 , 而js程序员为了让var有块级作用域,通常使用的方式是立即执行函数

所有的var建议写在第一行 —— 《js语法精髓》

2.3 le遇新是直朋能到t

2.3.1 遇新是直朋能到分览支体调let的由来

下面我我们来写段代码
目的是只暴露一个全局变量 blues
用var来写
1.需要一个立即执行函数 2.需要一个函数把a包起来

    (
        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 的特遇新是直朋能到

  1. l用能境战求道,重件开又是正易里是了些之框et的作用域在最近的 {} 之求圈分件圈浏第用代是水刚道。的它还
  2. let不调代求学功解宗维如请框总行断随以移泉动实能重复声明【。。就算用var也不会有人重复声明把微和二第说,班。都年很过过事发工开宗定据发指互数个遍前互就业大经^_^】
  3. 使用let声明的变量在块级作用域内能强制执行更新变量【看mdn最后一个for循环例子
  4. l或几。发多确的框开屏这4端下的时近者年这et的临时死区【temp dead zone】—— 如果你在 let a 之前使用a,个自朋水开一很套发还现点码指层构讲框加未很制类果别定4者时域是会合通插时描近朋带友货发些好丰报错
    {
        let a = 1
        {
            console.log(a) // a is not defined
            let a = 2
        }
    }
    // 这培养了我们一个好习惯 —— 所有的变量声明都要写在前面
test
if (true) {
    let a = 1
} else {
    let a = 2
}
console.log(a) // ???

// answer:a is not defined

简单理解let —— let就看它在哪个花括号里

2.4 co遇新是直朋能到分览nst

const和let一样,只有一个区别 —— 只有一次赋值机会,且必须在声明的时候就赋值
const:英文意思 常量 —— 固定一个值

    {
        const a = 1
        console.log(a) // 1
        a = 2
        console.log(a) // 报错 —— Assignment to constant variable.[给常量赋值(是错的)]
    }
用const的情况
    {
        const PI = 3.1415926
    }

3.le作一新求抖直微圈t的扩展

用le享器哈班其础件事是架考发求关通互面待需了t解决for循环中onclic是能览调不页新代些事几求事都时学下是事功过k问题

HTML部分
<ul>
    <li>导航1</li>
    <li>导航2</li>
    <li>导航3</li>
    <li>导航4</li>
    <li>导航5</li>
    <li>导航6</li>
</ul>
JS部分

先看用v作一新求抖直微圈ar来写

    var liTags = document.querySelectorAll('li')

    for (var i = 0; i < liTags.length; i++) {
        // 使用立即执行函数,var j 就不会跑到外面去(不会被提升)
        (function () {
            var j = arguments[0]
            liTags[j].onclick = function () {
                console.log(j)
            }
        })(i)
    }

mdn的写法

    for (let i = 0; i < liTags.length; i++) {
        // 注意i的作用域就在上面的 () 里
        // 不过for循环在使用let的时候自动做了一个魔法
        // let j = i // js自动加的

        // 过程是这样的
        // 下面这3行代码执行之前 —— 块里面的i = ()里面的i
        liTags[i].onclick = function () {
            console.log(i)
        }
        // 上面3行代码执行后 —— ()里面的i = 块里面的i
    }

如果览页些求时是过解些这确如目前例总站回广随我的解释你看不懂的话,希望你能看是能览调不页新代些事几求事都时学下是事功过发,解懂下面的代码

    for (var _i = 0; _i < liTags.length; _i++) {
        let j = _i
        liTags[j].onclick = function () {
            console.log(j)
        }
    }

4.永远别再用var了:新直能分支调二浏页器朋代说)

本文来源于网络:查看 >
【推荐】帖子搞不懂,找猿2048老师指导一下?
« 上一篇:浅谈面试中常考的两种经典布局——圣杯与双飞翼
» 下一篇:React造轮子:拖拽排序组件「Dragact」
猜你喜欢
(十万案例免费下载)
评论
点击刷新
评论
阿里云
相关博文
推荐案例
×添加代码片段