首页 > 其他分享 >let & const 与 var 的区别

let & const 与 var 的区别

时间:2023-04-25 14:57:57浏览次数:35  
标签:const log let var console 变量

变量声明 var

  •   通过 var 声明的变量会直接声明到全局(window)作用域 上

 

for (var i = 0; i < 3; i++) {     
  console.log(i);
}
console.log(i);
console.log(window.i);     // 0 1 2 3 3  

 

  • 问题:var 声明的变量如果想实现局部作用域只能通过函数作用域来实现
//这里的变量i 仍然是作为了全局变量在使用
(function() {
  for (var i = 0; i < 3; i++) {
    console.log(i);
  }
})();
console.log(i);
console.log(window.i);   
0
1
2
i is not underfined
  • 示例 异步打印出每次循环的键值(如果不使用匿名函数传递i的参数会输出3次:3)
for (var i = 0; i < 3; i++) {
  (function(i) {
    setTimeout(function() {
      console.log(i);
    }, 1000);
  })(i);
}

0
1
2

 

let 实现局部作用域

  • let 和 { } 配合可以产生一个新的作用域
for (let i = 0; i < 3; i++) {
    setTimeout(function () {
        console.log(i)
    }, 1000)
}
0
1
2

 

var 进行了变量提升

通过var声明的变量会自动将声明语句默认提升到最前面进行执行,但是对于读代码和理解程序的自上而下运行的流程不太好,同时也会造成变量的全局污染。

console.log(a);
var a = 1;
console.log(a);
// unidefined
// 1
console.log(a);
let a = 1;
console.log(a);
// a is not defined

 



 

const 变量声明  

const 拥有let 所有的特性,唯一的区别就是const声明的变量不可被修改引用空间

const b =1;
const b =2;
console.log(b);
// Identifier 'b' has already been declared
const children = {age:12};
children.age = 5;
children.sex = '女';
console.log(children);
// {age: 5, sex: "女"}

 

标签:const,log,let,var,console,变量
From: https://www.cnblogs.com/apon/p/17352579.html

相关文章

  • SQL Inject漏洞手工测试:基于报错的信息获取(select/delete/update/insert)
    技巧思路:在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。select/insert/update/delete都可以使用报错来获取信息。背景条件:后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端。重点:基于报错的信息获取------三个常用的用来报错的函数updatexml()......
  • Servlet添加自定义的过滤器没有效果?
    在学习HttpServlet的时候有个自定义过滤器的定义类,我们想让特定url走过滤器。publicclassMyFilterimplementsFilter{privateFilterConfigconfig;publicvoidinit(FilterConfigconfig)throwsServletException{this.config=config;}publi......
  • static与const的区别
    static是c++中非常常用的修饰符,他被用来控制变量的存储方式和可见性,下面我将从static修饰符的产生原因、作用谈起,全方面分析static修饰符的实质。static的两大作用:一、控制存储方式:static被引入以告知编译器,将变量存储在程式的静态存储区而非栈上空间。1、......
  • @PostConstruct的顺序
    其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又......
  • 【ⓈSpring & Spring MVC】Spring核心接口InitializingBean与SmartInitializingSingle
    SmartInitializingSingletonSmartInitializingSingleton中只有一个接口afterSingletonsInstantiated(),其作用是在spring容器管理的所有单例对象(非懒加载对象)初始化完成之后调用的回调接口。InitializingBeanInitializingBean接口为bean提供了初始化方法的方式,它只包括afterProp......
  • g_variant_builder_new使用
    staticvoidListExtraVideoDirectories(cDBusObject*Object,GVariant*Parameters,GDBusMethodInvocation*Invocation){intreplyCode=500;cStringreplyMessage="Missingextra-video-directoriespatch";cStringListdirs;#ifdefEX......
  • G_VARIANT_TYPE类型
    switch(b){case'b':returng_variant_type_copy(G_VARIANT_TYPE_BOOLEAN);case'y':returng_variant_type_copy(G_VARIANT_TYPE_BYTE);case'n':returng_varian......
  • pgsql根据日期查询错误:timestamp without time zone >= character varying
    最近工作中使用到pgsql数据库,使用日期传参查询时提示Causedby:org.postgresql.util.PSQLException:错误:操作符不存在:date>=charactervarying错误主要原因就是pgsql使用string类型参数去查询的话不会自动进行转换,而mysql并没有这种问题。解决方式也很简单,我们将字符串类......
  • web3 产品介绍 MyEtherWallet 方便和智能合约交互的钱包
    MyEtherWallet(简称MEW)是一款流行的去中心化以太坊钱包,它允许用户在安全且简单的界面中管理自己的以太坊资产。在本文中,我们将介绍MyEtherWallet的主要特点、功能以及如何使用它来管理以太坊资产。一、MyEtherWallet的特点安全性:MyEtherWallet是一款去中心化的钱包,用户可以保存......
  • C++中struct和class的区别 || C++中const和static的作用
    struct和class不同点两者中如果不对成员不指定公私有,struct默认是公有的,class则默认是私有的class默认是private继承,而struct默认是public继承  static不考虑类的情况隐藏。所有不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该......