JavaScript var let const变量声明问题

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title> 
<body> 
<button >1</button>
<button >2</button>
<button >3</button>
<button >4</button>
<button >5</button>
<button >6</button>
<button >7</button>
<button >8</button>
 
<script> 
    var btns=document.getElementsByTagName("button");
    //Javascript  ES5  var为全局变量,没有块级作用域变量概念
     for(var i=0;i<8;i++){
         btns\[i\].addEventListener('click',function () {
             console.log("var第"+i+"个按钮被点击");
         })
    }
    //javascript ES6 中有let 可以做块级作用域内变量
    for(let i=0;i<8;i++){
        btns\[i\].addEventListener('click',function () {
            console.log("let第"+i+"个按钮被点击");
        })
    }
    //ES5 用闭包实现块级作用域内变量,通过函数实现
    for(var i=0;i<8;i++){
        (function (index) {
            btns\[index\].addEventListener('click',function () {
                console.log("闭包第"+index+"个按钮被点击");
            })
        })(i)
        //相当于 
        function a(i){}
        a(index);
    }
  //是申请常量,如果此常量是对象,那么对象里面的属性可以修改
  const name="nsk";
  name="666"; //这是错的
  const person{
    name="nsk"; 
  }
  person.name="666" ;//这是合法的
  person = {};  //这是错的
</script>
</body>
</html>