变量声明

let(相当于之前的var)

let注意事项:

  • 1.没有预编译,不存在变量提升
  • 2.在代码块内,在let定义变量之前就是用变量会报错。先定完才能使用
    示例:
alert(a);
let a = 15;
//报错
  • 3.同一个作用域里面,不能重复定义变量
let a = 15;
let a = 14;
//这样写会报错
  • 4.for循环,for循环里面是父级作用域,{}里面又是一个作用域
let arr = [];
    for (let i = 0; i < 5; i++) {
   
        arr[i] = function() {
   
            console.log(i);
        }
    }
arr[3]();
//3
//如果将let换成var,结果为5

const(常量,定义好了不能改变)

const注意事项:

  • const定义的变量不能修改
  • const定义完变量必须有值,不能后赋值,也不能修改
const a;
a = 2;
console.log(a);
//会出现语法错误
  • 如果用const定义一个对象(数组),对象里面的值是可以修改的,因为js中无论是数组还是对象,传值方式都是引用传递

块级作用域

{
   
    //块级作用域
}
(function(){
   
		//TODO
})()
//块级作用域的功能就相似于于立即执行函数的功能


{
   {
   {
   {
   {
   let b = 2;{
   {
   {
   {
   {
   {
   let b = 1;}}}}}}}}}}}
//这两个b相互之间不会影响

像if(){},for(){},while(){}这些都有两个作用域()里面和{}里面