1、作用域
JavaScript 中共有两种作用域:全局作用域和方法作用域。使用 var 声明的变量的作用域是方法作用域,如下 date 变量在方法外面不可访问的:
function  getDate(){
var date = new Date(); //在getDate方法外不可访问
return date;
}
2、let 关键字
在 ES6 之前,是没有块级作用域的概念的。ES6 可以使用 let 关键字来实现块级作用域。let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
例如,
{ 
    let x = 2;
}
// 作用域外不能使用 x 变量
function test(){
    let n = 1;
    if (true) {
        let n = 2;
    }
    console.log(n); //值不会被修改,输出1
}
test();
if(1){
    let b = 100;
}
console.log( b );//错误 ReferenceError: b is not defined
//因为let的块级作用域,所以b变量只存在与if内部3、const 关键字
const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改.
例如,
const PI = 3.1415926535897; PI = 3.14; // 报错 PI = PI + 10; // 报错 const c;//会产生报错. const d = 1;//正确 const arr = [1, 2]; arr.push(1);//正确 [1, 2, 1] arr[0] = 3;//正确 [3, 2, 1] arr = [];//错误TypeError: invalid assignment to const `arr'
4、let 和 const 区别
const 和 let 的作用域是一致的,不同的是 const 变量一旦被赋值,就不能再改变了,而let则可以。
5、var 变量提升
JavaScript var 关键字定义的变量可以在使用后声明,也就是变量可以先使用再声明。
例如,
siteName = "cjavapy"; // 这里可以使用 siteName 变量 var siteName;
注意:
1)var 声明的变量属于函数作用域,let 和 const 声明的变量属于块级作用域;
2)var 存在变量提升现象,而 let 和 const 没有此类现象;
3)var 变量可以重复声明,而在同一个块级作用域,let 变量不能重新声明,const 变量不能修改。