「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」 本文摘要:ES6标准中声明变量var,let,const,static的定义及注意点,并对每个注意点给出相应的示例代码。
0.变量名的要求
- 变量名可以包含字母,数字,下划线和美元符号;
- 变量名必须以字母开头;
- 变量名也可以以$和_开头(但一般不这么用);
- 变量名是大小写敏感的(y和Y是不同的变量);
- 保留字(如JavaScript关键字)不能作为变量名使用;
1.var的定义及使用
var是js的一个关键字,它是用来声明变量的,是在当前域中声明变量,支持重复声明。
- 如果在方法中声明,作用域为这个方法,如下代码块1;
- 如果是在全局域中声明,作用域则为全局,如下代码块2;
- 如果在定义前使用此变量,则提示undefined,如下代码块3。
var a1 = 123;
function f1(){
console.log(a1);
}
f1(); //输出结果为123
function f2(){
var a2 = 456;
console.log(a2);
}
f2(); //输出456
console.log(a2); //输出ReferenceError: a2 is not defined
console.log(a3); //输出undefined
var a3;
2.let的定义及使用
ES6 新增了let命令,用来声明变量,不支持重复声明。
- 它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,为块级作用域,如下代码块1;
- 在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ),如下代码块2;
- 块级作用域的不同层级之间变量互不影响,如下代码块3。
{
let a4 = 444;
}
console.log(a4); //输出报错ReferenceError: a4 is not defined
{
console.log(a5); //输出报错ReferenceError: a5 is not defined
let a5 = 555;
console.log(a5); //输出555
}
{
let a6 = 666;
{
let a6 = 777;
console.log(a6); //输出为777
}
console.log(a6); //输出为666
}
3.const定义及使用
和其它语言一样,const声明一个只读的常量。
- 一旦声明,常量的值就不能改变,如下代码块1;
- 第一次声明时就得赋值,如下代码块2;
- 也存在暂时性死区,声明后才可以使用;
- 作用域为块级作用域,如下代码块3。
const LENGTH = 1024;
LENGTH = 2096; //提示报错TypeError: Assignment to constant variable.
const HEIGHT; //提示报错SyntaxError: Missing initializer in const declaration
{
const WIDTH = 123;
}
//console.log(WIDTH); //输出报错ReferenceError: WIDTH is not defined
4.static的定义及使用
static主要用在类的定义当中,static声明的变量为类属性,可以通过类名.属性名获取到,static声明的方法为类方法,可以通过类名.方法名()直接调用,示例代码如下:
class Desk{
static count = 0;
static sayno(){
console.log("调用方法sayno()");
}
}
console.log(Desk.count); //输出为0
Desk.sayno(); //输出为调用方法sayno()
上述所有代码环境为nodejs。