作用域
es6之前,只有2种作用域全局作用域和函数作用域。
到了es6,新增了一个块级作用域。
所谓的块级作用域,就是指用{}
大括号括起来的范围。
let
let只有一种域,块级作用域。
使用注意
let,没有变量提升的现象。
使用let,不能重复定义变量。
实例
for(let i = 0l i < 5; i++){
console.log("i:",i);
}
console.log("i:", i);
运行结果
let只作用于for循环内部,所以在外部i没有定义。
最终导致外面的console.log 报引用错误。
const
它只有一种域,全局作用域。
用于定义变量。
const 声明和赋值 要 同时完成。
const定义的值,不可改变。
实例
let user = {name:"Tim Chen"};
const Me = user;
console.log("user:",user); // {name:"Tim Chen"}
user.age = 12;
console.log("user:",user); // {name:"Tim Chen" , user.age: 12}
const定义的常量,指向 user这个地址;
所以user本身可以改变,但这种指向关系不可改变。
扩展知识——声明前置
当我们写下这样的代码
console.log("a:",a);
var a = 1 ;
实际上,它是这样的
var a;
console.log("a:",a);
a = 1 ;
运行结果
控制台显示 a:undifined
但如果用let,会直接报错,let更加严谨。