var与let与const都是用来声明变量,但是三者之间也有一些区别
var的使用
var a;//声明变量a
var a,b,c;//声明三个变量a,b,c
var a,b,c=2;//声明了三个变量只有c的值为2,
console.log(a,b,c)//undefined undefined 2

var 可以重复声明(不建议)

    var 可以同时声明多个变量,也可以同时赋值
var a=1;
!function () {
    console.log(a)//1
}()
    函数内部未声明变量,那么用外面的全局变量
var a=1;
!function () {
    var a=2;
    console.log(a)//2
}()
如果内部外部都声明了,那么用内部的
下面的小案例有点意思了,注意看:
var a=1;
!function () {
    console.log(a)//a的值为undefined
    var a=2;
}()
这里要注意一下,函数内后面的var a=2;实际上是两步,var a; a=2;我们传统js里只有两个作用域,全局作用域跟内部作用域,在上述代码中,变量a在函数内部被声明了,那么这个a就等于undefined,我们可以理解为这样:
var a=1;
!function () {
    var a;//undefined
    console.log(a)
    a=2;
}()
这里涉及到JavaScript中的两个概念:
            暂时性死区:函数中声明了变量a,那么对于变量a来讲,该作用域锁死,将不能从外界获得a的值
            变量提升:在同一个作用域下,变量a被声明了,那么该作用域上上下下到处都有了a,也就是说你在后面声明的变量,在前面也可以用,不一定非要是前面声明后面使用(强烈建议先声明后使用,不建议先使用后声明,我们的JavaScript是被大神在10天的时间内设计出来的,所以有一些缺陷,后续的let会逐渐改掉)。
 
 
let的使用
    必须先声明后使用
let a=1;
console.log(a)//1
先使用,后声明,对不起,报错了
console.log(b)
let b=2;
函数内也一样,
let a=1
!function () {
     let a=2;
     console.log(a)//2
}()
可行,但是let不存在变量提升
let a=1
!function () {
     console.log(a)//2
     let a=2;
}()
报错:首先由于在函数内声明了a,那么在函数内作用域就不会去获取外面的a值,同时由于函数内我们console.log的时候,还没声明a,所以报错,let不存在变量提升,必须先声明后使用
 
const的使用
const很多人认为它是用来声明常量,但是这里说的常量跟我们js里真正的常量是不一样的,我们js中认为的常量是指数字、字符串等不可被修改的量,比如1就是1,它不是2,怎么也不能是2,这是常量,我们现在认为const声明的是常量其实是不准确的。
const声明的量就是变量,跟let或var声明的变量没啥大区别,唯一的区别就在于,const声明的变量不可以被修改,比如:
const a=1;
a=2;
console.log(a)
报错
但是const也不是一定不可被修改,比如:
const a={name:'xiaoming',id:'1'}
console.log(a)
a.name='xiaohong'
a.id=2
console.log(a)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

var与let与const的更多相关文章

  1. 认识 var、let、const

    我们通过声明.初始化.值的可变性.作用域.变量提升以及在工作中如何使用等多个方面来详细了解var.let.const等关键字功能与特点. 声明 var,let:可以先声明,后赋值(初始化),默认值是 ...

  2. js中var,let,const理解

    var变量提升: 解释:在声明a之前输出a,因为a是使用var声明变量得到提升,解释为下句 var a: console.log(a) a = 1; var声明会提到最上面的位置,但是赋值的位置还是当 ...

  3. var与let、const的区别

    var与let.const 一.var声明的变量会挂载在window上,而let和const声明的变量不会: var a = 100;console.log(a,window.a); // 100 1 ...

  4. 5分钟掌握var,let和const异同

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://dzone.com/articles/javascript-difference-b ...

  5. JS中的块级作用域,var、let、const三者的区别

    1. 块作用域{ } <script type="text/javascript"> { var a = 1; console.log(a); // 1 } conso ...

  6. JavaScript中var、let和const的区别(转载)

    一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . c ...

  7. javascript中var、let和const的区别

    在javascript中,var.let和const都可以用来声明变量,那么三者有什么区别呢?要回答这个问题,我们可以从先想想:三种不同的声明会影响变量的哪些方面?这些方面也就是变量的特性,那么变量有 ...

  8. JS中var、let、const区别? 用3句话概括

    使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象: 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升: 使用const声明的是常量,在后面出现的代码中不能再修 ...

  9. 关于var、let、const的故事

    对于一门编程语言来说,变量与常量是再正常不过的两种,JavaScript是一直解释型的弱类型语言. JavaScript中变量或者常量可以用var.let.const(后两者是ES6的新特性). 1. ...

  10. javasript中var、let和const区别

    let和const都是es5,es6新版本的js语言规范出来的定义,在这以前定义一个变量只能用var.let和const都是为了弥补var的一些缺陷而新设计出来的. 简单来说是: let是修复了var ...

随机推荐

  1. 3. Rsync-远程同步(下)-企业案例

    已知3台服务器主机名分别为web01.backup .nfs主机信息见下表: 角色 外网IP(NAT) 内网IP(LAN) 主机名 WEB eth0:10.0.0.7 eth1:172.16.1.7 ...

  2. java架构之路-(Redis专题)聊聊大厂那些redis

    上几次说了redis的主从,哨兵,集群配置,但是内部的选举一直没说,先来简单说一下选举吧. 集群选举 redis cluster节点间采取gossip协议进行通信,也就是说,在每一个节点间,无论主节点 ...

  3. java ThreadLocal线程设置私有变量底层源码分析

    前面也听说了ThreadLocal来实现高并发,以前都是用锁来实现,看了挺多资料的,发现其实还是区别挺大的(感觉严格来说ThreadLocal并不算高并发的解决方案),现在总结一下吧. 高并发中会出现 ...

  4. centos7将python默认版本升级

    想用centos7来写python,但是默认安装的是python2.7(python -v命令可以查看版本信息) 准备升级到python3.5.2 首先安装编译环境 yum -y install gc ...

  5. MarkDown时序图

    时序图 语法 ```sequence ``` 标题 title: 我是标题 对象 participant A participant B as b-alias 交互 sequence A->B: ...

  6. CSAPP:代码优化【矩阵读写】

    转载请注明出处:https://www.cnblogs.com/ustca/p/11790314.html 写程序最主要的目标就是使它在所有可能的情况下都正确工作,另一方面,在很多情况下,让程序运行得 ...

  7. 关于ArcGIS的OBJECTID生成策略拙见

    目录 诉求SDEOBJECTIDArcMap编辑重置OBJECTID 诉求 非GIS专业的人员可能很难理解ArcSDE中的表OBJECTID的重要性,要么总想着自己动手去维护,要么就想直接忽略它,导致 ...

  8. MIT线性代数:15.子空间的投影

  9. csps60爆零记

    整场考试心态是崩的,T1水题打了半天表,将近两个小时才A掉. T2数据结构题想麻烦了,码了5.1K(数据结构选手) 等到最后一刻我发现T3水题,生无可恋.jpg 然后吃屎地在暴力中输出了下标,(%%% ...

  10. mysql-清除binlog日志命令

    记录一个清除MySQL里binlog日志的命令,可用在定时任务脚本里. 只保留1天前的日志: PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTER ...