为什么要学习ES6

每一次规范的诞生意味着语言的欠缺,性能的增强,javascript自身也有一些令人不称心的中央

  • 变量晋升个性减少了程序运行时的不可预测性
  • 语法过于涣散,实现雷同的性能,不同的人可能会写出不同的代码

let关键字

  • let申明的关键字具备块级作用域,所谓的块级作用域便是一个{}
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>let申明的变量具备块级作用域</title></head><body></body><script>    if (true) {        let a = 20;        console.log(a); //20        if (true) {            let b = 50;            console.log(b)//50        }        }    console.log(a) //a is not define</script></html>

  • let能够避免循环变量变成全局变量
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>let能够避免循环变量变成全局变量</title></head><body></body><script>      for(let i =0;i<2;i++){            }    console.log(i) //i is not define</script></html>

  • let申明的变量不会进行变量晋升
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>let申明的变量不会进行变量晋升</title></head><body></body><script>    console.log(a) // a is not define    let a = 20;</script></html>

  • let申明的变量具备暂存性死区的个性
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>let申明的变量具备暂存性死区的个性</title></head><body></body><script>    let a = 20;    if(true) {        console.log(a)         let a = 30;    }</script></html>

let面试之var

此题的关键点:变量i是全局的 函数输入的值是全局作用域下的i
<!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport"          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>let面试题</title></head><body></body><script>    var arr = [];    for(var i = 0;i<2;i++){        arr[i] = function () {            console.log(i)        }    }    arr[0]()//2    arr[1]()//2</script></html>

let面试题之let\

关键点:函数执行的时候,输入的是上一级循环产生的块状作用域下i的值

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>let面试题</title></head><body></body><script>    let arr = [];    for(let i =0;i<2;i++){        arr[i]= function () {            console.log(i)        }    }    arr[0]()//0    arr[1]()//1</script></html>

const

const用来申明常量 常量就是值 (内存地址)不能变动的量
  • 应用const申明的常量具备块级作用域的个性
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>const申明的常量具备块级作用域的个性</title></head><body></body><script>    if(true){        const  a = 10;        if(true) {            const a =20;            console.log(a)//20        }        console.log(a)//10    }    console.log(a)// a is not define</script></html>

  • 应用const申明的常量必须初始值
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>const申明的常量必须赋初始值</title></head><body></body><script>    const  a;    console.log(a)</script></html>

应用const申明的常量值(内存地址)不能更改

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>const申明的常量值不能更改</title></head><body></body><script>    const  arr = [200,300];    arr[0]='hello';    arr[1]='word';    console.log(arr);//['hello','word']    arr = [200,500];    console.log(arr) //TypeError: invalid assignment to const `arr'</script></html>

var let const的区别?