Let:用于声明一个变量
特点:
应用
for (var i = 0; i < 5; i++) {
console.log(i) // 0 1 2 3 4
}
console.log(i) // 5 i成了全局变量
==============
for (let j = 0; j < 5; j++) {
console.log(j) // 0 1 2 3 4
}
// let定义的j变量只在for循环的块级作用域中生效,不存在变量提升
console.log(j) // Uncaught ReferenceError: j is not defined
暂时性死区
当你在一个块里面,利用let声明一个变量的时候,在块的开始部分到该变量的声明语句之间,我们称之为临时性死区,你不可以在这个区域内使用该变量,直到遇到其let语句为止 只要在同一作用域内存在let命令,他所声明的变量就“绑定”在这个作用域内,不管外部有没有声明
var i = 5;
(function () {
console.log(i) // undefined
var i = 10
})()
===============
let j = 55;
(function () {
console.log(j) // ReferenceError: j is not defined
let j = 77
})()
(function hhh() {
console.log(j) // j的临时性死区 Uncaught ReferenceError: j is not defined
let j = 77 // 从这个函数的开始部分到这里,都是新的j的临时性死区
})()
不能重复声明
let zxx = 'zxx is a great girl'
let zxx = 'zxx is 18 years old' // Uncaught SyntaxError: Identifier 'zxx' has already been declared
=================
let zxx3 = 'zxx is a great girl'
var zxx3 = 'zxx is 18 years old' // Uncaught SyntaxError: Identifier 'zxx3' has already been declared
==============
{
let zxx3 = 'zxx is a great girl'
var zxx4 = 'zxx is 18 years old'
}
{
let zxx3 = 'zxx is a good girl'
var zxx4 = 'zxx is 8 years old'
}
// 不会报错,各个块级作用域之间不互相影响
const:就是声明一个常量,大部分特点和let一样
声明的时候一定要赋值,否则会报错
const b; // Uncaught SyntaxError: Missing initializer in const declaration
对于基本的类型而言的话,比如number,string,boolean等来说,确实它就是声明一个不会变的常量,只要你修改了它,就会报错
const ZXX = 'zxx is a great girl'
ZXX = 'NO' // Uncaught TypeError: Assignment to constant variable.
不过,对于引用类型而言的话,它指的并不会对象的内容不变,而是对象的地址不变。也就是说,你可以修改对象的内部成员,但是你不可以修改该变量的地址。
const ZXX = {
age: 18,
name: 'zxx'
}
ZXX ==> {age: 18, name: "zxx"}
ZXX.age = 8 {age: 8, name: "zxx"}
ZXX.weight = 90 {age: 8, name: "zxx", weight: 90}
ZXX = {} // Uncaught TypeError: Assignment to constant variable.
// 修改了ZXX的指针,这是不允许的
因为对象是引用类型的,ZXX中保存的仅是对象的指针,这就意味着,const仅保证指针不发生改变,修改对象的属性不会改变对象的指针,所以是被允许的。也就是说const定义的引用类型只要指针不发生改变,其他的不论如何改变都是允许的。
css3视频链接:https://pan.baidu.com/s/1-2J7nZ5LyMJh85fxl_4Nww
提取码:61xu