前端let的特性有哪些,作用域,变量提升,暂时性死区,重复声明,顶层对象和全局对象区分

<!-- 分析es6里面的let和const与之前的var之间的区别是什么 -->

<!-- let和const同样都是声明变量,只是let和const声明的变量只在块级作用域里面有效 -->
// 顶层对象window.在es5里面顶层对象和全局对象是相同的,所以即使变量不声明也可以使用,这就es5的比较严重的问题。无法在编译时提示变量未声明
<!-- 为什么新增let呢? -->

<script>
    //作用域的问题,这个输出的结果说明了循环i的作用域和内部变量i不在同一个作用域
    let i = 'bbb'
    for (let i = 0; i < 4; i++) {
        let i = 'sss'
        console.log(i);         //输出四次sss
    }

    //变量的提升问题
    console.log(foo);   //underfined
    var foo = 8

    // console.log(foo1);  //报错
    // let foo1 = 8

    //暂时性死区的问题,就是只要块级作用域里面有let,然后你在定义变量之前调用变量,那么就会报错
    let one = 'haha'
    if (true) {
        one = 123
        console.log(one);
        // let one;
    }


    //不允许重复声明变量
    function two(){
        let a = 10
        let a = 20
    }
	// 顶层对象window.在es5里面顶层对象和全局对象是相同的,
	 a = 10   
   console.log(window.a);       //10
   
    let b = 100
    console.log(window.b);            //underfined
 </script>
发布了21 篇原创文章 · 获赞 0 · 访问量 176

猜你喜欢

转载自blog.csdn.net/weixin_40180205/article/details/104780182