一. let,var,const 相同点
let,var,const 三者都可以声明变量
let age = 18;
var age = 19;
const age = 20;
二. let,var,const 的区别
1. let 声明的变量只在 let 命令所在的代码块内有效。
function fn(){
console.log(name)
let name = 'hhh'
}
fn();
// 输出 ReferenceError
//let声明的变量不会被初始化,在初始化之前是不可被访问的。这被称为“时间死区”。因此如果在声明变量之前访问,js会抛出 ReferenceError。
2. const 声明一个只读的常量,一旦声明,常量的值就不能改变。
const a; //Error: Missing initializer in const declaration
const a = 1 ; // 1
a = 12 ; //Error: Assignment to constant variable.
const a = 5; // 相同变量名不可重复定义,会报错
console.log(a) //Error: Identifier 'a' has already been declared
3. var 存在全局作用域和函数作用域两种。没有块级作用域的说法,并且存在变量提升。
function fn(){
console.log(name)
var name = '小熊'
}
fn();
// 输出 undefined
上述代码等同于
function fn(){
var name
console.log(name)
name = '小熊'
}
fn();
一条语句,多个变量
您可以在一条语句中声明很多变量。该语句以 var 开头,并使用逗号分隔变量即可:
var lastname="Doe", age=30, job="carpenter";
声明也可横跨多行:
var lastname="Doe",
age=30,
job="carpenter";
一条语句中声明的多个变量不可以同时赋同一个值:
var x,y,z=1;
//x,y 为 undefined, z 为 1。
通过上述的讲解,相信大家对let,var,const 的区别有了一定的了解,让我们来看一个例题吧!
答案: D
在函数中,我们首先使用
var
关键字声明了name
变量。 这意味着变量在创建阶段会被提升(JavaScript
会在创建变量创建阶段为其分配内存空间),默认值为undefined
,直到我们实际执行到使用该变量的行。 我们还没有为name
变量赋值,所以它仍然保持undefined
的值。使用
let
关键字(和const
)声明的变量也会存在变量提升,但与var
不同,初始化没有被提升。 在我们声明(初始化)它们之前,它们是不可访问的。 这被称为“暂时死区”。 当我们在声明变量之前尝试访问变量时,JavaScript
会抛出一个ReferenceError
。