zoukankan      html  css  js  c++  java
  • es6(一):es6介绍以及let,const

    es是js的规范,而js是具体实现
    将es6转化为es5代码工具:运用的多的是babel
    在线转换地址:babeltraceur(属于谷歌)
     
    1.let申明变量:let其实可以完全取代var,并且没有var这么多副作用
    1 {
    2       var a = 10;
    3       let b = 10;//let申明的变量是块级作用域
    4     }
    5     console.log(a)//10
    6     // console.log(b)//b is not defined
    let很适合的一种场景是:for
    1 for (let i = 0; i < 3; i++) {
    2       console.log(i)
    3     }
    4     for (var j = 0; j < 3; j++) {
    5       console.log(j)
    6     }
    7     // console.log(i)//i is not defined
    8     console.log(j)//3

    看下面这种情况:

     1 var k = []
     2     for (var i1 = 0; i1 < 5; i1++) {//var i1,申明了全局变量i1,只存在一个i1;即每次循环的i1指向的都是同一个i1
     3       k[i1] = function () {
     4         console.log(i1);
     5       }
     6     }
     7     k[3]();//5
     8 
     9     var p = []
    10     for (let i2 = 0; i2 < 5; i2++) {//let i2,申明变量i2,只在块级作用域有效;即每次循环的i2都是新的、重新申明的变量(同时js引擎内部可以记住上一次循环的值)
    11       p[i2] = function () {
    12         console.log(i2)
    13       }
    14     }
    15     p[3]()//3

    注意下面这种情况:

    1 for(let i3=0;i3<3;i3++){//圆括号里面是一个作用域
    2       let i3=10//花括号里面又是一个作用域
    3       console.log(i3)
    4     }
    5     //输出:10 10 10 
    let不存在变量提升(对比var变量提升)
    1 console.log(i4)//i4 is not defined
    2   let i4=10 
    3 console.log(i5) //undefined 未赋值
    4     var i5=100
    暂时性死区:在es6中,如果区块中存在let和const命令申明的变量,这个区块就对变量形成封闭作用域。即暂时性死区(temporal dead zone,简称TDZ)
    1 var people=100
    2     if(true){
    3       //TDZ开始
    4       // console.log(people)//people is not defined
    5       let people=1000//TDZ结束
    6       console.log(people)
    7     }
    暂时性死区本质:进入区块,只有let申明变量后,才能进行访问
     
    let不允许在相同作用域下重复申明变量
    1 function test(){
    2       let a=10;
    3       // var a=100
    4       let a=1000
    5     }
    6     test()//报错,a已被申明
    块级作用域的出现使得IIFE不再必要了;块级作用域外部不能访问块级作用域中的let申明的变量;借助花括号(可以嵌套多个),块级作用域的写法:
    1 {
    2   let a100=100
    3  }
    4  console.log(a100)//报错

    const:const申明只读的常量;申明时必须同时赋值,否则报错;同理,const与let一样都是块级作用域范围

    实质上:const是保证变量指向的内存地址不得改动。对于简单类型(数值,字符串,布尔值),表现为值不能改变;而对于复合类型(数组,对象),不变的是内存地址,指向的数据结构可能会变动
     1 const PI=3.14
     2     console.log(PI)
     3 
     4     // const AB//报错,必须申明时同时赋值
     5     // AB=1
     6     
     7     const ABC=[]
     8     ABC[0]='hello'
     9     ABC[1]='hi'
    10     console.log(ABC)
    11     // ABC={}//这时报错

    同时:ES6中,let,const,class申明的变量不再是顶层对象的属性;而var ,function申明的依然是顶层对象的属性(为了保持兼容性)

    1 console.log(window.PI)//undefined;PI是上面代码中由const申明的常量

    参考:更多详情请点击阮一峰前辈的ECMAScript 6 入门

  • 相关阅读:
    Eclipse启动不了
    第三章Hibernate关联映射
    System Generator简介
    Chipscope使用
    总线及数据传输技术【待完善】
    多相滤波器
    notepad++与ISE/Vivado关联
    常用IP核
    〖Linux〗Qt+gsoap开发客户端程序,服务端地址设定的字符串转换处理
    〖Android〗OK6410a的Android HAL层代码编写笔记
  • 原文地址:https://www.cnblogs.com/why-not-try/p/8081137.html
Copyright © 2011-2022 走看看