Var
var str1="str1";
var str1="str2";
console.log(str1);//str2
console.log(str3);
var str3="str3";//undefined
{
var str4="str4";
}
console.log(str4);//str4
1、var声明的变量是全局变量
2、可以重复定义同名的变量
3、var声明的变量作用域会提前
let
let str1="str1";
let str1="str2";//Uncaught SyntaxError: Identifier 'str5' has already been declared
console.log(str2);//Uncaught ReferenceError: Cannot access 'str4' before initialization
let str2="str2";
{
let str3="str3";
}
console.log(str3);//Uncaught ReferenceError: str3 is not defined
1、作用域不可以提前
2、在{}内有封闭的作用域
3、不可以定义相同名字的变量
4、let声明的是局部变量
const
const a="a";
const a="b";//Uncaught SyntaxError: Identifier 'a' has already been declared
const b="b";
b="c";//Uncaught TypeError: Assignment to constant variable.
const c;//Uncaught SyntaxError: Missing initializer in const declaration
{
const d="d";
}
console.log(d);//"d" is not defined
const obj={name="lisi"};
obj.name="wangwu";//是根据地址找到值,所以可以改变值,因为地址是没有改变的
console.log(obj);//wangwu
1、作用域不可以提前
2、在{}内有封闭的作用域
3、不可以定义相同名字的变量
4、在声明一个变量的同时需要给它赋值
5、在以已经赋值之后不可以再次改变常量的值