1.首先我们理解一个‘’提升‘’这个概念,意思就是无论var aaa =“我是var"这行代码在哪个位置,变量的声明都会被提升到所在作用域最前端执行,而变量的赋值则是在当前行执行,我们来个简单的例子
2.ex1

1.第一行输出aaa,而此时在同一作用域中,下一行的var aaa=“我是var”,声明并赋值了,所以按照提升机制,var aaa 将提升到第一行,但是 aaa=“我是var"仍在console.log(aaa)之下,所以第一个输出undefined。
2.接下来执行hhh()函数,依葫芦画瓢,同理,依次输出undefined,我是var2;
3.回到最后一行的输出,输出的是"我是var"而不是"我是var2”,因为我们在函数其实重新声明过aaa的,但是函数中的声明的变量均为局部变量,在离开函数后,将会被立即销毁,而且局部变量并不会影响全局变量,可以说此aaa非彼aaa,反之,如果我们在函数中直接赋值aaa=“我是var2”,我们修改的是全局变量aaa的值,那么最后输出的就是"我是var2”。

3.var,let,const的区别
var:没有块的概念,可以跨块访问, 不能跨函数访问。
let:能在块作用域里访问,不能跨块访问,也不能跨函数访问
const:用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
来一个小小的example
ex2:

只能输出一个1,下面两个均会报错 is not defined。

而当我修改namee的值时,便会报错 Assignment to constant variable。

而重新声明并赋值依然会报错 Identifier ‘namee’ has already been declared
然后,如果namee是一个对象呢?是不是也不能修改?
这里我看到了一篇文章https://blog.csdn.net/unionz/article/details/80032048。里面讲述了const声明的对象是否能修改。所以我们也来试试看!
ex3:

结果是它并没有报错,而是输出了{name: “222”, sex: “male”},是的没错,被修改了。
so why?
由于对象是引用类型,ooo中所保存的是对象的指针,而不是值,const只是不让你改变指针,而修改对象的属性时并不会改变指针,因此这种操作时被允许的。
4.最后我们再思考一下,let和const是否也存在提升?,try it!


额。。。很明显,都是不被允许的 Cannot access ‘aaa’ before initialization。所以只有var有提升机制,let和const都没有。
5.综上所述,三者的共同处都是不可跨函数,
不同之处:var可跨包,可提升,而let和const不可跨包,不可提升。
const不可更改,而let和var都可更改。

             over!欢迎指正 !!!!!!

谈谈var变量提升以及var,let,const的区别相关推荐

  1. vue 访问 const 变量_var与let、const的区别

    最近在学习VUE时,视频的项目在创建一个变量时经常用Const来创建,再此之前我一直使用var来创建一个变量,通过查阅资料得到以下解释: 一,var声明变量存在变量提升,let和const不存在变量提 ...

  2. 浅谈js中的var和function变量提升,var声明变量提升,块级作用域中的函数提升

    1.首先最常见的一种变量提升 console.log(a); //输出 undefinedvar a=10;console.log(a) // 输出 10 var 有提升的作用其实上面的代码会变成会变 ...

  3. var/let/const、块级作用域、TDZ、变量提升

    概览 ES6 新增了两个定义变量的关键字:let 与 const,它们几乎取代了 ES5 定义变量的方式:var.let是新的var,const简单的常量声明. function f() {{let ...

  4. Js中var,let,const的区别

    一:区别: 1.var声明的变量属于函数作用域,而let和const声明的变量属于块级作用域:(js作用域在上篇文章) 2.var声明的变量存在变量提升,而let和const没有 3.var声明的变量 ...

  5. var 、let 和 const 的区别

    var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域 var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征 var ...

  6. var、let与const的区别

    在进行变量声明的时候我们一般使用的是var,但是在ES6中新增的语法中有了let和const,今天我们来看看它们的区别. 目录: 一.为什么使用ES6? 二.let 1.作用域 2.不存在变量提升 3 ...

  7. 一看就懂的var、let、const三者区别

    哈喽大家好,又见面啦,我依旧是那个可爱的蛙人. 今天又周五了啊,划水人的一天,开心. 话不多说哈,直接搂代码 var 变量提升机制 我们在全局作用域中或还是在局部作用域中,使用var关键字声明的变量, ...

  8. 红宝书系列之 var let const 的区别

    目录 声明风格及最佳实践 var 关键字 1. var 使用 2. var 声明作用域 3. var 声明提升 let 声明 1. let 作用域 2. 暂时性死区 3. 全局声明(网易前端笔试题) ...

  9. JavaScript里的var变量

    最近学了一点HTML和JavaScript. 在JavaScript里面有var变量,而且好像只有var变量.换句话说var就是个万精油,他没有确定的类型,他的类型取决于赋值给他的变量的类型.例如: ...

最新文章

  1. HDU 2206 IP的计算(字符串处理)
  2. 3D 激光雷达地图相对精度自动评价算法
  3. linux第一天的简单整理
  4. Python Django 重写delete方法实现单个对象的删除
  5. 1.2)深度学习笔记------神经网络的编程基础
  6. 混合云下割裂的Web安全管理挑战如何破?
  7. fwoa中做excel导入时page理解
  8. mysql 索引失效情况总结
  9. java水彩画效果滤镜,PS通过滤镜给照片制作水彩画效果
  10. ftp服务器文件不让上传,ftp服务器不让上传文件
  11. java 释放句柄_Java文件句柄释放
  12. 1条命令解决使用kubeadm安装 kubernetes 从 k8s.gcr.io 拉取镜像失败的问题
  13. 朱松纯:走向通用人工智能——从大数据到大任务
  14. 浅谈进程地址空间与虚拟存储空间
  15. 区间DP小结(附经典例题)
  16. 教你用键盘打出各种符号 如 ♠♣♥........
  17. postman实践与运用
  18. “HIMO CUBE”全新亮相ADM展,海马体照相馆获原创品牌创新奖
  19. 路漫漫其修远兮,吾将上下而求索(2019培训总结)
  20. 智慧环保-污水处理远程监控解决方案

热门文章

  1. c语言函数操作一维数组
  2. H3C实验室Vlan的简单运用
  3. 使用docker安装设置oracle
  4. 必要时进行保护性拷贝
  5. SVN: bdb: BDB1538 Program version 5.3 doesn't match environment version 4.7
  6. 类与对象 - PHP手册笔记
  7. python检测局域网IP
  8. python 迭代器 生成器
  9. 系统架构师-基础到企业应用架构系列之--开卷有益
  10. android 精选文章