JS 中作用域有:全局作用域、函数作用域。没有块作用域的概念。
ES6 中新增了块级作用域。块作用域由 { } 包裹,if 语句和 for 语句里面的 { } 也属于块作用域。
console.log(a) // undefiend
var a = 10;
// 相当于
var a;
console.log(a); // undefiend
a = 10;
console.log(b) // 报错 未定义
let b = 10;
console.log(c) // 报错 未定义
const c = 10;
if(true) {
var a = 10;
let b = 10;
const c = 10;
}
console.log(a); // 10
console.log(b); // b is not defined
console.log(c); // c is not defined
var a = 10;
let b = 10;
const c = 10;
var a = 20;
console.log(a); // 20
let b = 20; // 报错 b 已声明不能重复声明
const c = 20; // 报错 c 已声明不能重复声明
// const a; 报错 必须赋值
let aa = 10;
aa = 20;
console.log(aa); // 20
const a = 10;
// a = 20; 报错 不能修改
const arr = ['杨和苏'];
arr[0] = 'GAI'
console.log(arr); // ["GAI"]
const obj = {name: '大傻'};
obj.name = '刘聪';
obj.age = 38;
console.log(obj); // {name: "刘聪", age: 38}