es6中的let与const关键字及其与var关键字的不同

1.let关键字

先放let关键字声明变量的特点总结:

  1. let关键字可以将变量绑定到当前所在作用域(通常是{ … }内部)

  2. 无法在块级作用域之外的地方访问使用let命令声明的变量

  3. 不允许使用let关键字多次声明同一个变量

  4. 不存在变量提升,使用let关键字声明的变量一定要在声明之后使用,否则将报错

1.let关键字可以将变量绑定到当前所在作用域(2.无法在块级作用域之外访问声明的变量)

js的函数作用域不用说了,在函数内不论是用var还是let声明的变量是无法直接被外界访问到的。

但是JS的块级作用域,如:for(){ .. }if(){ .. }{ .. }代码块等这种都是属于块级作用域,在这些块级作用域中使用var关键字声明的变量,是可以直接在块级作用域以外的地方访问到的,这样会增加污染全局变量的风险。

就像这样:

	var a = 1;

	if (true) {
    
    
		var a = 2
	}

	console.log(a) // a

由于if循环里用var关键字重新给a赋了值,因此打印出来a是2。我们肯定不希望全局的a = 1被污染,此时用let关键字就可以解决这个问题:

	var a = 1;

	if (true) {
    
    
		let a = 2
	}

	console.log(a) // 1

此时在for循环里用let声明的a就被绑定到了这个for循环块级作用域中,在for循环代码块之外也就无法访问到了

3.不允许使用let关键字多次声明同一个变量

这个非常容易理解了,就是一个变量无法用let关键字声明多次。

使用var关键字可以将同一个变量a多次声明为不同的值,但是使用let关键字声明的变量却只能声明一次,否则将报错:

let a = 1
let a = 2 // Uncaught SyntaxError: Identifier 'a' has already been declared
4.不存在变量提升

var关键字声明的变量存在变量提升问题,就像下面:

	console.log(a); // undefined
	var a = 1

上面的var a = 1会被拆分成这样:

var a 
console.log(a) // undefined
a = 1

这就是变量提升,用var关键字声明的变量会先被提升到所在作用域的最顶端,等实际赋值时才将a赋值为1。

let关键字就可以避免这个问题,它会提前抛出异常:

	console.log(a); // Uncaught ReferenceError: Cannot access 'a' before initialization
	let a = 1

2. const关键字

const关键字用来声明只读的一个常量。用const声明的变量的值无法被修改。不过需要注意的是声明的变量的类型是基础类型还是引用类型。

  • 基础类型(Number、Boolean、String等)值就保存在变量指向的那个内存地址,因此等同于常量。

  • 引用类型(Object、Array等)变量保存的只是一个指向书记数据的指针,const只能保证指向这个指针的值是不变的,至于它的数据结构是否改变时无法控制的

const关键字和let一样也可以把当前变量绑定到当前作用域中。

3.ES6声明变量的6中方法

ES5只有两种声明变量的方式:varfunction。ES6除了添加letconst命令,还加了两种声明变量的方式:importclass命令

猜你喜欢

转载自blog.csdn.net/vet_then_what/article/details/125515189