标签:before 区别 特性 关键字 语法 zha 不可 context 好的
a = 7
delete a
// res -> true
let
很好的解决了这个问题let a = 5
console.log(a) // 5
console.log(window.a) // undefined
var a = 5
let a = 6 // 出现报错: Uncaught SyntaxError: Identifier ‘a‘ has already been declared at <anonymous>:1:1
console.log(a)
let a = 5 // 出现报错: Cannot access ‘a‘ before initialization at xxxx
var a = 5
// error: Cannot access ‘a‘ before initialization
if (true) {
// 必须先定义才能使用, 这里的 a 并不会去查找作用域外声明的 a
a = 5
let a = 5
}
if (true) let a = 5 // 出现报错 Lexical declaration cannot appear in a single-statement context
// 只在当前作用域有效
for (let j = 0; j < 3; j++){
console.log(j)
}
console.log(j) // j is not defined
// 同步操作
for (var i = 0; i < 3; i++) {
// setTimeout 异步操作 等到主线程空闲并且时间到 才去执行
setTimeout(function () {
console.log(i);
});
} // 3个3
for (let i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i);
});
} // 0 1 2
const一般用作常量的定义,与 let 类似.
不管是 ES5 还是 ES6, 常量存储栈中,对于 Object/Array 栈中存储的是引用地址,真正的值是存在堆内存中, 对于堆中的值我们是可以进行修改的.
//ES5 常量定义
Object.defineProperty(window, ‘PI‘, {
value: 3.14,
writable: false // 不可写入
})
PI = 6
console.log(PI) // res => 3.14
Object.defineProperty(window, ‘MAN‘, {
value: {
name: ‘zhangsna‘,
age: 5
},
writable: false // 不可写入
})
MAN.age = 25
console.log(MAN) // res => {name: "zhangsna", age: 25}
// ES6 常量定义
const a = 5
a = 6
console.log(a) // res => 6
const b = {
name: ‘zhangsan‘,
age: 6
}
b.age = 36
console.log(b) // res => {name: "zhangsan", age: 36}
标签:before 区别 特性 关键字 语法 zha 不可 context 好的
原文地址:https://www.cnblogs.com/pamela1226/p/13204077.html