欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6 let和const认识

程序员文章站 2023-12-22 13:24:58
...

本文章总结自阮一峰老师ES6入门

  • let、const和var的使用和区别

    • 举个例子

        var a = [];
        for (var i = 0; i < 10; i++) {
        	a[i] = function () {
        		console.log(i);
        };
        }
        a[6](); // 10
        //如果用let代替var,输出就为6
        //var为何为10不必多说,用let声明的i,每一次的i只在当前循环有效,下一轮循环的时候的i其实是一个新的变量
        //JavaScript引擎会记住上一次循环的值,因此会输出6
        //此外for循环的一个特别之处,设置循环变量的那部分是一个父作用域,而循环体内部是一个子作用域
        for(let i=0;i<3;i++){
        	let i = 'abc';
        	console.log(i);//打印3次abc,表明两个i有不同的作用域
        }
      
    • let不存在变量提升,即必须声明后使用

    • let、const存在暂时性死区,只要块级作用域内存在let命令,它所声明的变量就绑定在这个区域,不受外界影响

        var tmp = 123;
        if(true){
        	console.log(tmp);//报错ReferenceError
        	let tmp=456;
        }
        -------------
        typeof x  ==> //报错ReferenceError
        let x
        -------------
        //未声明的变量反而不会报错,只是undefined
        typeof undeclared_variable   ==> "undefined"
        -------------
        //隐蔽的死区
        function bar(x=y,y=2){
        	return [x,y]
        }
        bar();  //报错,这里第一个参数x=y,此时y没有声明,所以报错。换成x=2,y=x不会报错
        -------------
        let x=x;   ==>ReferenceError x is not defined
        -------------
        let x = do{  //x得到块级作用域{}的返回值
        	let t=f();
        	t*t+1;
        }
      
    • let不允许在同一作用域中重复声明变量

    • const声明一个只读常量,一旦声明不可更改。同时,声明时必须立刻赋值

    • const作用域与let相同,也存在死区,只能在声明位置后使用

    • const实际保证的不是变量的值不可改变,而是变量指向的内存的地址不可改变

      • 比如:
      	const foo={} 
      	foo.prop=123;  ==>正确 
      	foo={};        ==>error : "foo" is read-only 改变地址就会报错
      
    • 如果想将对象冻结,使用Object.freeze方法:

       	const foo=Object.freeze({}); 
      	foo.prop=123; ==> 常规模式不起作用,严格模式报错
      
    • ES5声明变量只有var 和 function,ES6共有6种:加入了let,const,import,class

    记录学习ES6的总结,若有错误和建议,请指正…

上一篇:

下一篇: