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