关于javascript:ES6二-let-与-const

5次阅读

共计 1300 个字符,预计需要花费 4 分钟才能阅读完成。

又来更新学习笔记啦 ~

目录

  • let

    • 解决 var 存在的问题
    • 特点

      • 1. 有块级作用域
      • 2. 全局变量不能用过 window(全局对象)拜访
      • 3. 不能反复申明变量
      • 4. 不会进行变量晋升
  • const

    • 特点

      • 1. 所有 let 的属性都有
      • 2. 只能定义常量,不能被批改
      • 3. 申明时必须初始化
    • 为什么 const 定义对象,其属性能够扭转,然而常量不能够?
  • 最佳实际
  • ES6-ES10 学习幅员

let

解决 var 存在的问题

let 的呈现是为了解决一些 var 存在的问题

  1. 同名变量,不在一个作用域,互不影响
// 上面两个 i,尽管名字一样,然而不在一个作用域,所以互不影响
for (let i = 0; i < 3; i++) {
    let i = 'foo'
    console.log(i) // foo
}
  1. 解决循环嵌套计数器命名雷同凌乱的问题
const arr = [1, 2, 3, 4]
for(let i = 0; i < 3; i++) {for(let i = 0; i < 4 ; i++) {console.log(arr[i])
    }
}
// 1 2 3 4 1 2 3 4 1 2 3 4
  1. 解决计数器循环中有异步变量被扭转的问题(解决原理:闭包)
for (var i = 0; i < 3; i++) {setTimeout(() => {console.log(i)
    }, 0)
}
// 输入三个 3 

特点

1. 有块级作用域

{
    let a = 1
    console.log(a)
}
console.log(a) //a is not defined

2. 全局变量不能用过 window(全局对象)拜访

var b = 3
let c = 4
console.log(b, c) // 3,4
console.log(window.b, window.c) //3,undefined

3. 不能反复申明变量

var b = 3
let c = 4
console.log(b, c) // 3,4

var b = 4
console.log(b) //4

let c = 5  // Identifier 'c' has already been declared c 曾经被申明
console.log(c)

4. 不会进行变量晋升

function test() {console.log(a)
    let a = 1
}
test() // Cannot access 'a' before initialization 不能在初始化之前调用 

const

特点

1. 所有 let 的属性都有

2. 只能定义常量,不能被批改

cosnt a = 2
a = 3 //Assignment to constant variable 类型谬误 

3. 申明时必须初始化

const a //Missing initializer in const declaration  申明的时候短少初始化
a = 2

为什么 const 定义对象,其属性能够扭转,然而常量不能够?

const 实际上保障的,并不是变量的值不得改变,而是变量指向的那个内存地址不得改变,对于简略类型的数据(数值,字符串,布尔值),值就保留在变量指向的那个内存地址,因而等同于常量。

但对于复合类型的数据(次要是对象和数组),变量指向的内存地址,保留的只是一个指针,const 只能保障这个指针指向的内存地址是固定的,至于它指向的内存地址中保留的数据结构是不是可变的,就齐全不能管制了。因而将一个对象申明为常量要小心。

最佳实际

不必 var,主用 const,遇到可变的应用 let

学习幅员

正文完
 0