JavaScript中 let,const 和 var 的相同点和区别

一. 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

题目来源:GitHub - lydiahallie/javascript-questions: A long list of (advanced) JavaScript questions, and their explanationsA long list of (advanced) JavaScript questions, and their explanations :sparkles: - GitHub - lydiahallie/javascript-questions: A long list of (advanced) JavaScript questions, and their explanationshttps://github.com/lydiahallie/javascript-questions

猜你喜欢

转载自blog.csdn.net/m0_52761651/article/details/127314462