zoukankan      html  css  js  c++  java
  • var let const 区别

     // var let const 区别
            // ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景,
          
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>var</title>
        <script>
            window.onload = function(){
                var aLi = document.getElementsByTagName('li');
                for (var i=0;i<aLi.length;i++){  /*将var改为let*/
                  aLi[i].onclick = function(){
                  alert(i);    /*单击任何标签都输出4*/
            }
        }
    }
        </script>
    </head>
    <body>
        <ul>
            <li>0</li>
            <li>1</li>
            <li>2</li>
            <li>3</li>
    </ul>
    </body>
    </html>
            // 在ES6之前,大部分人会选择使用闭包来解决这个问题,今天我们使用ES6提供的let来解决这个问题。


    // 1.0 var声明的变量会挂在window上,而let和const不会 var a=100 console.log(a,window.a) //100 100 let b=100 console.log(b,window.b) // 100 undefined const c = 1; console.log(c,window.c); // 1 undefined // 2.0 var声明的变量存在变量提示,let和const不存在变量提示 console.log(d); // undefined (d已声明还没赋值,默认得到undefined值) var d = 100; console.log(e); // 报错:Uncaught ReferenceError: Cannot access 'e' before initialization let e = 10; console.log(f); // 报错:Uncaught ReferenceError: Cannot access 'e' before initialization const f = 10; // 3.0 let和const声明形成块级作用域 if(true){ var g=100; let h=10; const i=10; } console.log(g) //100 console.log(h) //Uncaught ReferenceError: h is not defined console.log(i) //Uncaught ReferenceError: i is not defined //4.0 同一作用域下let和const不能声明同名变量,而var可以 var a1 = 100; console.log(a); // 100 var a2 = 10; console.log(a); // 10 let a3 = 100; let a3 = 10; // 5.0 暂存死区 var a4=100; if(1){ //在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a, // 而这时,还未到声明时候,所以控制台Error:a is not defined a4=10; let a4=1; } // 6.0const // 1、一旦声明必须赋值, //  2、声明后不能再修改 // 3、如果声明的是复合类型数据,可以修改其属性 const a5 = 100; const list = []; list[0] = 10; console.log(list);  // [10] const obj = {a:100}; obj.name = 'apple'; obj.a = 10000; console.log(obj);  // {a:10000,name:'apple'}
  • 相关阅读:
    svg手写标签
    使用node搭建本地服务器
    window电脑上设置鼠标触屏板的开关
    本地git如何与gitlab连接
    utools中的内网穿透下架,可使用natapp替代。
    移动端rem.js
    扫码登录开发者工具时,提示:调试过程中开发者可通过以下公众号获得你的相关信息。怎么取消这个公众号啊?
    实现图片的延迟加载
    Chrome 中安装 Vue 扩展程序
    VMWare虚拟机Bridged类型网卡ping不通的原因和解决办法
  • 原文地址:https://www.cnblogs.com/zhuMother/p/12988705.html
Copyright © 2011-2022 走看看