• ES6中的一些新特性


    这两个命令是ES6的新语法知识。这两个新的特性解决了ES6中的一些小的“bug”问题。其中包含一些知识:块级作用域、let命令、const命令、全局对象的属性。Google V8引擎已经部署了ES6的部分特性。当然,使用Traceur转码器、Bebal转码器可以将ES6方式编写的程序转为ES5.

    块级作用域


    一个花括号{}代表一个块级作用域,作用域嵌套时外层代码块不受内层代码块的影响,之前的立即执行匿名函数的作用是为了形成局部作用域,防止变量污染,但是这个新的特性:块级作用域的出现也就不需要这个函数咯,噢耶!

    需要注意:函数本身的作用域,在其所在的块级作用域中。ES5存在函数提升,不管函数在何处声明,函数声明都会提升到当前作用域的顶部,得到执行。但是ES6支持块级作用域,其内部声明的函数都不会影响到外部作用的外部。

    我们来测试一下之前ES5的var声明的效果

    var name = "aa";
    while (true) {
        var name = "bb";
        console.log(name);//bb
        break;
    }
    console.log(name);//bb
    

    这里我理解为:while作用域内部的name变量提升到了外部,导致内部的name变量替换了外部作用域中的name变量,所以两次输出都是bb。

    let命令

    JavaScript中声明变量的方式有三种:var,let,const。var存在变量提升,这是ECMAScript5中的命令,ES5中只有全局作用域和函数作用域。在ES6中才有块级作用域。
    let命令的用法类似var,但是所声明的变量,只有let命令所在代码块内有效。如果不声明就使用就会报错,这在语法上称为“暂时性死区”。不允许在相同作用域内,重复声明同一个变量。因此,不能在函数内部重新声明参数不存在变量提升

    const命令

    const用来声明常量,一旦声明,常量的值就不能改变。
    使用时注意:

    • 对常量重新赋值不会报错,只会默默的失败。
    • 与let命令相同,只在声明所在的块级作用域内有效
    • const命令也不存在提升,只能在声明的位置后面使用,提前使用同样会抛出ReferenceError。
    • 同样不可重复声明。
    • const命令只是指向变量所在的地址,如果将const变量赋值为一个对象,则此常量储存的是一个地址,不可变的只是这个地址,但对象本身是可以变的,依然可以为其添加新属性。如果真的想将对象冻结,应该使用Object.freeze方法。冻结之后,不但不可以修改存储地址,对象本身的内容也不能被改变。
    • const有一个很好的应用场景:就是当我们引用第三方库的时候声明的变量,用const来声明可以避免未来不小心重名而导致bug。

    全局对象的属性

    全局对象是最顶层的对象,在浏览器环境指的是window对象,在Node.js指的是global对象。所有的全部变量都是全局对象的属性。
    ES6规定,var命令和function命令声明的全局变量,属于全局对象的属性;let命令,const命令,class命令声明的全局变量,不属于全局对象的属性。

  • 相关阅读:
    todo: SDC
    2017-2018-2 实验四《Android程序设计》实验报告
    《Java程序设计》第十周课下作业
    2017-2018-2 实验三 《Java面向对象程序设计》实验报告
    《Java程序设计》第九周学习总结
    结对编程练习_四则运算(第二周)
    《Java程序设计》第八周学习总结
    2017-2018-2 实验二 《Java面向对象程序设计》实验报告
    结对编程练习_四则运算(第一周)
    《Java程序设计》第七周学习总结
  • 原文地址:https://www.cnblogs.com/sminocence/p/8451274.html
Copyright © 2020-2023  润新知