ES6学习(一)

来源:互联网 发布:网狐6603房卡牛牛源码 编辑:程序博客网 时间:2024/06/02 02:01

ES6

ES6核心内容主要包括const、let 、arrow funtions、 class extends 、super、 template string、 destructuring 、default 、rest argument

import export

我们之前写的JS一直都没有模块化的体系,无法将一个庞大的JS工程拆分成一个个功能相对独立但相互依赖的小工程,再用一种简单的方法把这些小工程连接在一起。

这有可能导致两个问题:
1. JS代码变得很臃肿,难以维护
2. 需要注意每个script标签在html中的位置,因为他们通过有依赖的关系,顺序错了可能就会出现bug

为了解决上面问题,我们利用第三方提供的一些方案,主要有两种CommonJS(服务器端)和AMD(浏览器端如requireJS)

作用域变量

作用域就是一个变量的作用范围,也就是声明一个变量以后,这个变量可以在什么场景下使用,以前JS只有全局作用域,还有一个函数作用域。

使用let解决var的问题

  1. var没有块级作用域,定义后在当前闭包中都可以访问,如果变量名重复,就会覆盖前面定义的变量,并且也有可能被其他人更改。
  2. var 在for循环标记变量共享,一般在循环中使用的变量会被共享,其本质也是由于没有块级作用域造成的。
for (var i = 0; i < 3; i++) {     setTimeout(function () {         alert(i);  //弹出三次3     }, 0); }

块级作用域

在用var定义变量的时候,变量是通过闭包进行隔离的,现在用了let,不仅仅可以通过闭包隔离,还增加了一些块级作用域隔离。 块级作用用一组大括号定义一个块,使用 let 定义的变量在大括号的外面是访问不到的。

  • 实现块级作用域
if(true){    let name = 'ES6';}console.log(name);// ReferenceError: name is not defined
  • 不会污染全局对象
if(true){    let name = 'ES6';}console.log(window.name);//undefined
  • 在for循环中也可以使用,嵌套循环不会相互影响
  • 重复定义会报错
  • 不存在变量的预解释
  • 闭包新写法
{}

常量

使用const我们可以去声明一个常量,常量一旦赋值就不能再修改了。

  • 常量不能重新赋值
const MY_NAME = 'study1';MY_NAME = 'study2';//Assignment to constant variable
  • 变量值可改变
    const限制的是不能给变量重新赋值,而变量的值本身是可以改变的,下面操作是可以的。
const names = [study];names.push('study2');console.log(names);
  • 不同的块级作用域可以多次定义
const A = "0";{    const A = "A";    console.log(A)}{    const A = "B";    console.log(A)}console.log(A)