谈谈var变量提升以及var,let,const的区别
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的区别相关推荐
- vue 访问 const 变量_var与let、const的区别
最近在学习VUE时,视频的项目在创建一个变量时经常用Const来创建,再此之前我一直使用var来创建一个变量,通过查阅资料得到以下解释: 一,var声明变量存在变量提升,let和const不存在变量提 ...
- 浅谈js中的var和function变量提升,var声明变量提升,块级作用域中的函数提升
1.首先最常见的一种变量提升 console.log(a); //输出 undefinedvar a=10;console.log(a) // 输出 10 var 有提升的作用其实上面的代码会变成会变 ...
- var/let/const、块级作用域、TDZ、变量提升
概览 ES6 新增了两个定义变量的关键字:let 与 const,它们几乎取代了 ES5 定义变量的方式:var.let是新的var,const简单的常量声明. function f() {{let ...
- Js中var,let,const的区别
一:区别: 1.var声明的变量属于函数作用域,而let和const声明的变量属于块级作用域:(js作用域在上篇文章) 2.var声明的变量存在变量提升,而let和const没有 3.var声明的变量 ...
- var 、let 和 const 的区别
var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域 var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征 var ...
- var、let与const的区别
在进行变量声明的时候我们一般使用的是var,但是在ES6中新增的语法中有了let和const,今天我们来看看它们的区别. 目录: 一.为什么使用ES6? 二.let 1.作用域 2.不存在变量提升 3 ...
- 一看就懂的var、let、const三者区别
哈喽大家好,又见面啦,我依旧是那个可爱的蛙人. 今天又周五了啊,划水人的一天,开心. 话不多说哈,直接搂代码 var 变量提升机制 我们在全局作用域中或还是在局部作用域中,使用var关键字声明的变量, ...
- 红宝书系列之 var let const 的区别
目录 声明风格及最佳实践 var 关键字 1. var 使用 2. var 声明作用域 3. var 声明提升 let 声明 1. let 作用域 2. 暂时性死区 3. 全局声明(网易前端笔试题) ...
- JavaScript里的var变量
最近学了一点HTML和JavaScript. 在JavaScript里面有var变量,而且好像只有var变量.换句话说var就是个万精油,他没有确定的类型,他的类型取决于赋值给他的变量的类型.例如: ...
最新文章
- HDU 2206 IP的计算(字符串处理)
- 3D 激光雷达地图相对精度自动评价算法
- linux第一天的简单整理
- Python Django 重写delete方法实现单个对象的删除
- 1.2)深度学习笔记------神经网络的编程基础
- 混合云下割裂的Web安全管理挑战如何破?
- fwoa中做excel导入时page理解
- mysql 索引失效情况总结
- java水彩画效果滤镜,PS通过滤镜给照片制作水彩画效果
- ftp服务器文件不让上传,ftp服务器不让上传文件
- java 释放句柄_Java文件句柄释放
- 1条命令解决使用kubeadm安装 kubernetes 从 k8s.gcr.io 拉取镜像失败的问题
- 朱松纯:走向通用人工智能——从大数据到大任务
- 浅谈进程地址空间与虚拟存储空间
- 区间DP小结(附经典例题)
- 教你用键盘打出各种符号 如 ♠♣♥........
- postman实践与运用
- “HIMO CUBE”全新亮相ADM展,海马体照相馆获原创品牌创新奖
- 路漫漫其修远兮,吾将上下而求索(2019培训总结)
- 智慧环保-污水处理远程监控解决方案