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

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
        <script>
            // 使用严格模式,可以检测出js中未声明的变量,可以避免全局污染
            // "use strict";
            aStr = 4;
            console.log(aStr);
    
            // var会出现全局污染
            // 如果重新定义了outerWidth,浏览器就不会再根据其大小而显示数值,一直为66
            var outerWidth = 66;
            console.log(window.outerWidth);
    
            // var声明的变量有可能发生变量提升
            function test() {
                console.log(item); // undefined
                var item = 33;
            }
            test();
    
    
            // console.log(str);
            // 报错,这是因为let、const会形成暂时性死区TDC,有效地避免了var声明造成的变量提升
            // let str = 44;    
            // const STR = 44;
    
            // let和const具有块作用的特点
            let name = 'ray'; 
            {
                let name = 'sunny';
                // 不允许重复定义
                // let name = 'andy';
                console.log(name);
            }
            console.log(name);
        </script>
    </body>
    
    </html>
    

    一、var

    1.1 var没有块作用域,很容易污染全局

    // 函数中的变量污染了全局环境
    function run() {
      web = "houlaizhe";
    }
    run();
    console.log(web); //houlaizhe
    
    // 没有块作用作用域时var也会污染全局
    for (var i = 0; i < 10; i++) {
      console.log(i);
    }
    console.log(i);
    

    1.2 块作用域

    // 没有块作用时使用立即执行函数模拟块作用域
    // (function() {
    //   var $ = this.$ = {};
    //   $.web = "后盾人";
    // }.bind(window)());
    // console.log($.web);
    
    // 块作用域
    {
      let $ = (window.$ = {});
      $.web = "后盾人";
    }
    console.log($.web);
    

    二、let、const的相同点:

     ① 存在块作用域特性,变量只在块域中有效;

     ② 会形成暂时性死区TDC

    三、let、const的区别

    • let声明变量,const主要声明常量(全部大写)

    • const只能声明一次变量,同时要赋值,且不能再次赋值,可以改变常量的引用类型值

    const声明的常量不允许全新赋值举例

    try {
      const URL = "https://www.baidu.com";
      URL = "https://www.taobao.com"; //产生错误
    } catch (error) {
      throw new Error(error);
    }
    

    const改变常量的引用类型值

    const INFO = {
      url: 'https://www.baidu.com',
      port: '8080'
    };
    INFO.port = '443';
    console.log(INFO);
    

    四、Object.freeze 冻结变量

    如果冻结变量后,变量也不可以修改了,使用严格模式会报出错误。
    "use strict"
    const INFO = {
      url: 'https://www.houdunren.com',
      port: '8080'
    };
    Object.freeze(INFO);
    INFO.port = '443'; //Cannot assign to read only property
    console.log(INFO);
    
  • 相关阅读:
    Laravel 静态资源管理及表单布局
    Laravel 中间件的使用(前置与后置)
    Laravel 中的模板中的url
    Laravel 基础语法和include的使用
    Laravel模板的继承
    Laravel的路由、控制器和模型
    用composer安装laravel
    vue cli3.0 给路径起别名 vue.config.js ;代码统一风格 .editorconfig
    github的使用
    Java学习的第十二天
  • 原文地址:https://www.cnblogs.com/nadou/p/14438127.html
Copyright © 2011-2022 走看看