变量
ES6中,增加了let和const两个关键字声明变量。
建议大家放弃var声明变量的模式。var的特性与现代语言差异过大,非常容易造成bug
1,let
let声明变量非常简单,如下代码:
let name = 'Tom';
console.log(name);
let a = 1;
let b = 2;
let sum = a+b;
在声明变量中,变量名为驼峰命名法。例如:let myName = 'Tom';
变量一定要先申明,在使用,例如:
console.log(name);//错误,找不到name
let name = 'Tom';
2,const
const声明的变量,其值不能改变,代码如下:
const age = 10;
age = 11;//error,const 声明的变量,其值不能改变
但大家一定注意一点,const声明的变量值不能变,但如果该变量为对象,其对象属性值可变。
const person={
name:'Tom',
age:10,
};
person.name = 'Jhon';//没问题
person = {
name:'TT',
age:11
}//error,错误,不能改变person的值
3,变量作用域
let和const声明的变量,以大括号为作用域边界,只有在变量作用域内,才可以使用该变量,超过变量作用域再使用该变量,报错。例如:
{
const name = 'Tom';
console.log(name);//正确
}
console.log(name);//错误!name作用域再上面大括号内,超过无法使用
在有多层作用域嵌套的情况下,如果有同名变量,内层变量会屏蔽外面变量作用域,例如:
{
const name = 'Tom';
{
const name = 'Jim';
console.log(name);//打印为Jim
}
console.log(name);//打印为Tom
}
在多层作用域嵌套下,如没有同名变量,作用域范围不变。例如:
{
const name = 'Tom';
{
console.log(name);//打印为Tom
}
console.log(name);//打印为Tom
}
注意,在多层作用域嵌套下,内层如有声明同名变量,内层变量声明之前,变量不能使用。例如:
{
const name = 'Tom';
{
console.log(name);//错误!找不到name变量!
const name = 'Jim';
}
console.log(name);//打印为Tom
}