(6):var、let、const区别

4 篇文章 1 订阅
本文详细介绍了JavaScript中var、let和const声明变量的区别。var具有函数作用域和变量提升,let则限制了块级作用域,不存在变量提升,并且不能在同一作用域重复声明;const同样为块级作用域,但声明后值不可修改。通过实例展示了它们在实际编程中的应用和影响,如变量提升、for循环中的临时死区等。
摘要由CSDN通过智能技术生成

1、JavaScript中var、let、const区别

1、使用 var 声明的变量, 其作用域为该语句所在的函数内 (函数作用域) ,且存在变量提升现象;
2、使用 let 声明的变量, 其作用域为该语句所在的代码块内 (块级作用域) ,不存在变量提升;
3、使用 const 声明的是常量,其作用域为该语句所在的代码块内 (块级作用域) , 在后面出现的代码中不能再修改该常量的值,不存在变量提升;
4、var 变量 可以重复声明,而在同一个块级作用域,let 变量 不能重新声明, const 变量 不能修改。

2、说明

1、在 ES6(ES2015) 出现之前,JavaScript中 声明变量 就只有通过 var 关键字, 函数声明 是通过 function 关键字,而在 ES6之后 ,声明的方式有 varletconstfunctionclass ,这里主要讲的是 varletconst 之间的区别。

3、var

1、使用关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如果声明是发生在任何函数外的顶层声明,那么这个变量就属于全局作用域。举例说明:

	var a = 1;  // 此处声明的变量a为全局变量
	function fn() {
		var a = 2;  // 此处声明的变量a为函数fn的局部变量
		console.log(a);  // 2
	}
	fn();
	console.log(a);  // 1

2、在声明变量时,省略 var 的话,该变量就会变成全局变量,如全局作用域中存在该变量,就会更新其值。举例说明:

	var a = 1;   //  此处声明的变量a为全局变量
	function fn() {
		a = 2;  // 此处的变量a也是全局变量
		console.log(a);  // 2
	}
	fn();
	console.log(a);  // 2

3、提升: 是指无论 var 出现在一个作用域的哪个位置,这个声明都属于当前的整个作用域,在其中到处都可以访问到。注意只有变量声明才会提升,对变量赋值并不会提升。如下例所示:

	console.log(a);  // undefined
	var a = 24;
	// **********************************************
	var b;
	console.log(b);  // undefined
	b = 24;
	// **********************************************
	// 对未声明过的变量进行操作,就会报错
	// 假设 c 未声明过,Uncaught ReferenceError: c is not defined
	console.log(c); 

4、let

1、 let 声明的变量,具有如下几个特点:

  • (1) let 声明的变量具有 块作用域 的特征。
  • (2) 在同一个块级作用域,不能重复声明变量。
  • (3) let 声明的变量 不存在变量提升 ,换一种说法,就是 let 声明存在暂时性死区(TDZ)。
	let a = 24;
	console.log(a);  // 24
	console.log(b);  // Uncaught ReferenceError: b is not defined
	let b = 23;
	// **********************************************************************
	// Uncaught SyntaxError: Identifier 'a' has already been declared
	let a = 10;

一个关于 varlet 经典的例子:
(1) var 定义,代码运行后,会在控制台打印出 10 个 10

	for (var i = 0; i < 10; i++) {
    	setTimeout(function(){
        	console.log(i);
    	},100)
	};

(2) let 定义,该代码运行后,就会在控制台打印出 0 - 9

	for (let i = 0; i < 10; i++) {
    	setTimeout(function(){
        	console.log(i);
    	},100)
	};

五、const

1、const 声明方式,除了具有 let 的上述特点外,其还具备一个特点,即 const 定义的变量,一旦定义后,就不能修改, 即 const 声明的为常量。

	const a = 23;
	console.log(a);  // 23
	a = 24;
	console.log(a);  // Uncaught TypeError: Assignment to constant variable.

2、并不是说 const 声明的变量其内部内容不可变,如以下例子:

	const obj = {a:23, b:24};
	console.log(obj.a);  // 23
	obj.a = 10;
	console.log(obj.a);  // 10

3、总结: 准确的说,是 const 声明创建一个 值的只读引用。 但这并 不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值