【JS学习】var let const声明变量的异同点
【JS学习】var let const声明变量的异同点
前言:
本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享。不足之处也欢迎指正,作者会积极思考与改正。
总述
js中有三种声明变量的方法:var,let,const。他们各自有各自的有特点。
| 声明格式 | 声明 | 变量提升 | 作用域 | 是否存在于windows对象中 |
|---|---|---|---|---|
| var a="abc"; | 变量 | 是 | 全局或者函数内部 | 是 |
| let b="abc"; | 变量 | 否 | 块区域以及向下兼容或者函数内部 | 否 |
| const c="anc"; | 常量(但引用类型依然可可变) | 否 | 块区域以及向下兼容或者函数内部 | 否 |
案列
实践出真知
变量提升
所谓变量提升是指:在执行js代码时,编译器会预先将声明变量的语句执行(与let,const的区别)//案列一: a="123";//此处不会报错,因为编译器会先执行var a语句,再执行此句
var a;
console.log(a);//123 b="123";//此处会报错,因为初始化前无法访问“b”
let b;
console.log(b);//123 c="123";
const c;//此处会报错,因为常量声明中缺少初始值设定项
console.log(c);//123 //案例二:if(false)里面的var语句也会执行
var a = "1";
function hd() {//此处会先执行if内部的var a
if (false) {
var a = "0";
}
console.log(a);//输出undefine
}
hd(); let a = "1";//向下兼容的块作用域
function hd() {//不会先执行if内部的let a
if (false) {
let a = "0";
}
console.log(a);//输出1
}
hd(); const a = "1";
function hd() {//不会先执行if内部的const a
if (false) {
const a = "0";
}
console.log(a);//输出1
}
hd();
作用域:var存在于最近函数或者全局作用域中(没有块作用域)
//案列一:正常语句中(与let,const的区别)
var i=-1;
for(var i=0;i<4;i++){ }
console.log(i);//此处会打印4 因为var定义的变量具有全局作用域 let i=-1;
for(let i=0;i<4;i++){//此处的let只会作用在{}块域内 }
console.log(i);//此处会打印-1 因为let定义的变量具有块作用域 const a=-1;
for(let i=0;i<4;i++){
const a=1;//此处的const只会作用在{}块域内 }
console.log(a);//此处会打印-1 //案列二:函数内部(let,const都是这样)
var a=1;
function test(){
var a=2;
console.log(a);//函数内部打印2;在方法内部全局作用 }
test();
console.log(a);//依然打印1 函数内部不影响外部 let a=1;
function test(){
let a=2;
console.log(a);//函数内部打印2;在方法内部全局作用 }
test();
console.log(a);//依然打印1 函数内部不影响外部 const a=1;
function test(){
const a=2;
console.log(a);//函数内部打印2;在方法内部全局作用 }
test();
console.log(a);//依然打印1 函数内部不影响外部var的全局变量会存储在windows对象中(与let,const的区别)
var a=1;
console.log(window.a);//输出1 let a=1;
console.log(window.a);//输出undefined const a=1;
console.log(window.a);//输出undefined
const定义常量 但注意当为引用类型时依然可以改变
const a=1;
a=2;//报错,不可重复赋值 const a=[1,2,3];
a[1]=1;
console.log(a);//输出[1,2,3],可用freeze方法冻结
尾记:
有任何问题,欢迎私聊哟~~~
也可关注公众号“诗与凉风”联系作者哦~~

【JS学习】var let const声明变量的异同点的更多相关文章
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
- var、let、const声明变量的区别
let和var声明变量的区别:1.let所声明的变量只在let命令所在的代码块内有效.(块级作用域) for(let i=0;i<10;i++){ // ... } console.log(i) ...
- let、var、const声明的区别
前言 看了方应杭老师的一篇解释let的文章,对JavaScript中的声明有了深刻的理解,这里也就有了总结一下JavaScript中各种声明之间区别的这篇文章. JavaScript中变量声明机制 首 ...
- 深度理解js中var let const 区别
首先要理解js中作用域的概念 作用域:指的是一个变量的作用范围 1.全局作用域 直接写在script中的js代码,在js中,万物皆对象,都在全局作用域,全局作用域在页面打开时创建,在全局作用域中有一个 ...
- ES6 let const 声明变量 块级作用域
ES6 中除了使用 var 定义变量,还有let.const,定义变量. function getValue(condition){ console.log(typeof value2); // un ...
- JS学习笔记(二)变量、作用域及内存问题
一.基本类型和引用类型的值 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值:简单的数据段. 引用类型值:可能由多个值构成的对象. 当将一个值赋给变量时,解析器必须确定这个值是基 ...
- HttpRunner学习5--使用variables声明变量
前言 在HttpRunner中,如果需要声明变量,可以通过关键字 variables 来完成,要引用声明的变量,则是通过 $+变量名 (如 $token )来实现.variables 可以在 conf ...
- Javascript 基础学习(三)js 的原始类型和声明变量
java的基本数据类型一共有 byte short int long float double char boolean js中定义变量使用关键字 var js的原始类型(五个) String: 字符 ...
- js中使用const声明变量时需要注意
const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址(初始化的内容)不得改动.对于简单类型的数据(数值.字符串.布尔值),值就保存在变量指向的那个内存地址,因此等同于常量. 简单 ...
随机推荐
- React中对render进行的小优化
react中state和props变化会造成render的重新渲染,有时候我们会在render函数中进行一些稍微复杂的逻辑运算 比如说,像下边这种 在props中将 industries引入,然后对其 ...
- python(iJmeter-master)接口测试程序部署实践
记录学习性能测试过程遇到的问题 环境 安装环境如下: Windows 10 1803 VMWare Workstation 15 Pro Centos Linux release 7.9.2009(c ...
- undo表空间丢失、损坏
1.模拟误删undo表空间 rm -rf undotbs01.dbf 2.解决步骤 SQL> shutdown immediateORA-01116: error in opening data ...
- 跨站点请求伪造 - SpringBoot配置CSRF过滤器
1. 跨站点请求伪造 风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务. 原因:应用程序使用的认证方法不充分. ...
- UML—20—002
博客班级 < https://edu.cnblogs.com/campus/fzzcxy/2018SE1> 作业要求 <https://edu.cnblogs.com/campus/ ...
- JVM虚拟机(二):字节码执行引擎
运行时栈帧结构 栈帧是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈的栈元素.栈帧存储了方法的局部变量表.操作数栈.动态链接.和方法返回地址等信息. ...
- DRF类视图让你的代码DRY起来
刚开始写views.py模块的代码,一般都是用def定义的函数视图,不过DRF更推荐使用class定义的类视图,这能让我们的代码更符合DRY(Don't Repeat Yourself)设计原则: 使 ...
- 5分钟看懂系列:Python 线程池原理及实现
概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...
- 真香!Python十大常用文件操作,轻松办公
日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘. 本篇文章整理了10个Python中最常用到的 ...
- 图解JanusGraph系列 - JanusGraph指标监控报警(Monitoring JanusGraph)
大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 整理所有图相关文章,请移步(超链):图数据库系列-文章总目录 源码分析相关可查看github(码文不易,求个sta ...