定义变量 var let const 的区别

1.var

var 命令定义变量会发生‘变量提升’的现象。即变量可以在声明之前使用,值为undefined
为了纠正这种现象,在es6中新增了 let和const(块级作用域)。

2.let

let相当于之前的var
使用let定义变量需要注意:

1.let声明的变量只能在let命令所在的代码块内有效(块级作用域)

	{
		let a = 12
		var b = 5
	}
	
	console.log(a)  // 报错
	console.log(b)  // 5

for循环计数器中,就很适合使用let声明变量

	for (let i = 0; i < 10; i++) {
 	 // ...
	}

	console.log(i);
	// 报错: i is not defined

下面的代码如果使用var,最后输出的是10

	var a = [];
	for (var i = 0; i < 10; i++) {
	  a[i] = function () {
    	console.log(i);
 	 };
	}
	
	a[6](); // 10

如果使用let,声明的变量仅在块级作用域内有效,最后输出的是 6

	var a = [];
	for (let i = 0; i < 10; i++) {
 	 a[i] = function () {
    	console.log(i);
  	};
	}
	
	a[6](); // 6

2.没有预解析,不存在变量提升。在代码块内,只要let定义变量,在之前使用都会报错。(先定义变量在使用)

	let a = 12
	function let1 (){
		console.log(a) // 此区域称作 暂时性死区
		let a = 5
	}
	
	//代码执行会报错

3.不能重复定义变量

	let a = 12
	let a = 5
	console.log(a)
	
	//代码执行会报错

4.for循环中小括号内是一个作用域(父级作用域),花括号内又是一个作用域

	for (let i = 0; i < 3; i++) {
	
  		let i = 'q';
 	 	console.log(i);
	}
	
	// a
	// a
	// a

打印了3次 a ,说明定义的两个 i 不是同一个变量

3.const

const特性和let一样

1.const 定义完变量必须有值,不能后赋值

	const a ;
	a = 12;
	console.log(a) // 报错

2.const定义的变量不能修改

	const a = 12;
	a = 5;
	console.log(a) // 报错

还要一种针对数组的特殊情况(这种情况下是可以修改数组的内容的)

	const arr = ['a','b']
	arr.push('c')
	console.log(arr) // ['a','b','c']

针对这种情况,es6新增了 Object.freeze (冻结的意思)

	const arr = Object.freeze(['a','b'])
	arr.push('c')
	console.log(arr) // 报错

建议:以后定义变量就用let,不要在使用var,
const http = require(‘http’) 类似于这种情况可以使用const

前端进阶精选:点此去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值