1.加分号;
let a = b+c;//加分号
加分号也有助于在某些情况下提升性能,因为解析器会尝试在合适的位置补上分号以纠正语法错误。
2.关键字
break do in typeof
case else instanceof var
catch export new void
class extends return while
const finally super with
continue for switch yield
debugger function this
default if throw
delete import try
3.保留字 :es6将未来作为关键字所保留的词语
//始终保留
enum
//严格模式下保留
implements package public
interface protected static
let private
//模块代码中保留
await
不要使用保留字和关键字,作为标识符和属性名
4.var(所有版本) ,let和const(es6以上)
4.1 var 声明作用域
使用var 在function exit 时销毁
function a (){
var message = "hi"; //局部变量
}
a();
console.log(message)//error
4.2 全局变量,省略var,严格模式下报错
function a (){
message = "hi"; //全局变量
}
a();
console.log(message)//hi
4.3 var声明提升,声明的关键字将自动提升到函数作用域{}的顶部
fuction a(){
console.log(age);
var age = 1;
}
a();//underfined
//相当于
fuction a(){
var age;
console.log(age);
age = 1;
}
a();//underfined
4.4 let声明
let声明的范围是块作用域
var声明的范围是函数作用域
//var
if(true){
var name ="zjw";
console.log(name);//"zjw"
}
console.log(name);//zjw
//let
if(true){
let age = 22;
console.log(age);//22
}
console.log(age);//22
4.5 let不允许在同一个块作用域中出现沉余声明(也叫重复声明)
//var
var a;
var a;
//let
let b;
let b;//error
var name;
let name;/error
let age;
var age;//error
4.6 let暂时性死区
在let声明前执行的瞬间叫做暂时性死区
不会在作用域中被提升
//var
console.log(message);//undefined
var message = "人生经历如小说情节如此精彩"
//let
console.log(message);//error,暂时性死区
let message = "哈哈哈"
与var全局变量中不同,使用let在全局作用域中不会变成window对象的属性(var声明的则会)
4.7 const 声明
const的行为与let基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且尝试修改const声明的变量会导致运行时错误。
声明对象,修改对象的属性值不会报错
let i = 0;
for (const j = 0 ;i<5;++i){
console.log(j)
}
//7,7,7,7,7
for(const key in {a:1,b:2}){
console.log(key)
}
//a,b
for(const value of [1,2,3,4,5]){
console.log(value);
}
//1,2,3,4,5
声明风格及最佳实践: