es6 let/const

145 阅读1分钟

命令总结

touch 创建文件、 mkdir 创建文件夹、 cd 文件夹名、 cat 文件夹名

let/const和var区别:

  • 块级作用域 (***)
  • 不会变量提升
  • 不污染全局变量
  • 不能重复声明同一个变量
  • 有常亮了(基本数据和引用数据类型的问题)(声明必须赋值)
  • 暂时性死取问题(必须先声明后使用)

eg1:块级作用域 if/else, for ,while switch...

  var oAs = document.getElementById('box').getElementsByTagName('a');
  for (var i=0;i<oAs.length;i++) {
        oAs[i].onclick = function() {
            console.log(i);
        }
  }
  
  console.log(i);
  
  1.闭包解决
  for (var i=0;i<oAs.length;i++) {
      (function(i){
        oAs[i].onclick = function() {
            console.log(i);
        }
      })(i)
  }
  
  2.ES6作用域解决
    for父级作用域, 里面子作用域
  
  for (let i=0;i<oAs.length;i++) {
        oAs[i].onclick = function() {
            console.log(i);
        }
  }
  
  
  面试题:
  
    for(var a = 0; a < 3; a++) {
        setTimeout(function() {
        console.log(a);
   }, 1000);
   
    for(var a = 0; a < 3; a++) {
        (function(a){
            setTimeout(function() {
             console.log(a);
        })(a)
   }, 1000);
   
    for(let a = 0; a < 3; a++) {
        setTimeout(function() {
             console.log(a);
   }, 1000);
   
   

eg2: 不污染全局变量了

  let a = 1;
  console.log(window.a); // ==> undefined

eg3:不能重复声明

  function fn(a, b, c) {
      let b = 1; // ==>>不能重复声明
      
  }
  

###ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。