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
变量不能修改。