ES6学习笔记一:let和const命令

164 阅读2分钟

1.let声明变量

变量未声明就使用,会报错,is not defined

变量声明后,初始值为undefined。未赋值就使用,此时变量的值为:undefined

2.与var的区别

​ var 有变量提升 没有块级作用域 可以重复声明 污染全局变量

​ let没有变量提升 有块级作用域 不能重复声明 不污染全局变量

1.没有变量提升,有块级作用域。

        console.log(a); //undefined
        console.log(b); //报错 b is not defined 
        if (1 === 1) {
            var a = 1;
            let b = 10; //b只在此{}中使用
        }
        console.log(b);//报错 b is not defined

以上代码一起执行时,a可以打印

2.不能重复声明

 		var a = 1;
        var a = 2;
        console.log(a); //2 后面声明的覆盖前面的

        let b = 1;
        let b = 2;
        console.log(b); //报错 Identifier 'b' has already been declared 

以上代码一起执行时,程序报错,a不会打印,一般varlet不会混用吧

3.不污染全局变量

		// let RegExp = 10;
        // console.log(RegExp); //10
        // console.log(window.RegExp); //ƒ RegExp() { [native code] }

        var RegExp = 10;
        console.log(RegExp); //10
        console.log(window.RegExp); //10

3.const声明常量

1.声明常量 一旦被声明 无法修改 不能修改字面量 但可以修改对象内部的内容

​ 与let一样没有变量提升 是块级作用域 不能被重复声明 不污染全局变量

		const max = 20;
        // max = 30; //Assignment to constant variable. 不能修改字面量
        const person = {
            name: "zhangsan"
        }
        person.name = "lisi"; 
        console.log(person); //{name: "lisi"} 但可以修改对象内部的内容

4.let的应用 for循环

		var arr = []; 
        for (var i = 0; i < 10; i++) {
            arr[i] = function() {
                return i; //
            }
        }  
        console.log(arr); 
		console.log(arr[5]()); //10
//	循环结束,arr中存放10个函数,每个函数中有一个Global,Global中的i=10
// 打印函数,看函数内容:
// [[Scopes]]: Scopes[1]
//  0: Global {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
// 全局作用域中的i=10

        const arr1 = []; //没有变量提升,每次循环,都会创建一个块级作用域,每个作用域中都有独立的变量i,最终函数执行。
        for (let i = 0; i < 10; i++) {
            arr1[i] = function() {
                return i;
            }
        }
       	console.log(arr1); 
		console.log(arr1[5]()); //5
//循环结束 arr中存放10个函数,每个函数有一个块级作用域和全局作用域,全局作用域中i=10,块级作用域中i随着循环体变化。函数执行时,会先去块级作用域中取值。
// 打印函数,看函数内容:
//   [[Scopes]]: Scopes[2]
//   0: Block {i: 0}
//   1: Global {parent: Window, opener: null, top: Window, length: 0, frames: Window, …
        

5.let和const使用建议

​ 默认情况下使用const,当变量值需要修改时用let。