声明变量关键字:var、let、const的区别
声明变量关键字:var、let、const的区别
- var关键字
- let关键字
- 1、暂时性死区
- 2、全局声明
- 3、for循环中的let声明
- const关键字
- 使用建议
- 1、尽量不使用var
- 2、优先使用const,再考虑let
var关键字
定义一个变量:var操作符,后跟变量名。
var message;
这里定义了一个名为message的变量,可以用它来保存任何类型的值。
未初始化的情况下,变量保存一个特殊值undefined。
var声明的范围是函数作用域
当在一个函数内用var定义变量时,该变量将在函数退出时销毁:
function foo() {var message = 2;
}
foo();
console.log(message);//ReferenceError: message is not defined
即在函数外部访问不到函数内部var定义的变量。
使用var声明的变量会自动提升到函数作用域顶部:
function foo() {console.log(a);var a = 20;
}
foo();//undefined
等价于:
function foo() {var a;console.log(a);a = 20;
}
foo();//undefined
let关键字
与var关键字不同的是,let声明的范围是块作用域
if (true) {let message = 20;console.log(message);//20
}
console.log(message);//ReferenceError: message is not defined
1、暂时性死区
和var相比,let声明的变量不会被提升到函数作用域顶部:
console.log(message);//ReferenceError: message is not defined
let message = 20;
在let声明之前的执行瞬间被称为“暂时性死区”,在此阶段引用任何后面才声明的变量都会抛出RefenenceError。
2、全局声明
和var相比,let在全局作用域中声明的变量不会成为window对象的属性,而var声明的变量会(需在浏览器中运行):
var messageVar = 20;
console.log(window.messageVar);//20let messageLet = 21;
console.log(window.messageLet);//undefined
3、for循环中的let声明
对比for循环中的var与let:
for (var i = 0; i < 5; i++) {setTimeout(() => console.log(i), 0);
}
//5、5、5、5、5
for (let j = 0; j= < 5; j++) {setTimeout(() => console.log(j), 0);
}
//0、1、2、3、4
var中,在退出循环时,迭代变量保存的是退出循环的值:5,在执行超时逻辑时,所有的i都是同一个变量,所以输出同一个值;
let中,JavaScript引擎在后台会为每个迭代循环声明一个新的迭代变量,所以每个setTimeout引用的是不同的变量实例,即输出我们期望的值。
const关键字
const与let基本相同(为块作用域),区别为const声明变量的同时必须初始化,而且不能够修改const声明的变量的值,否则会导致运行错误。
const声明的限制只适用于它指向变量的引用,即如果const声明的是一个对象,那么修改这个对象内部的属性是允许的:
const message = {};
message.key = '123'//OK
不能用const来声明迭代变量(因为迭代变量会改变),如果只用const声明一个不改变的for循环变量是可以的。
使用建议
1、尽量不使用var
限制自己使用let和const有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值。
2、优先使用const,再考虑let
使用const可以让浏览器运行时保持变量不变,也可以让静态代码分析工具提前发现不合法的赋值操作。
声明变量关键字:var、let、const的区别相关推荐
- js中定义变量之②var let const的区别
var 上一篇文章有讲过,是js定义变量的关键词. 但是在es6中,新添加了两个关键词,用于变量声明的关键词:let 和const 接下来就说一下var let 和const的区别: 首先说var 用 ...
- php变量和js变量的区别吗,JS声明变量的3种方式和区别
JavaScript 是弱类型语言,可以不需要声明变量而直接使用.这样虽然简单但不易发现变量名方面的错误,所以不建议这样做.通常的做法是在使用 JavaScript 变量前先声明变量.目前,JavaS ...
- 前端开发:JS中let、var和const的区别详解
前言 前端开发过程中,JS声明变量的关键字想必开发者都不陌生,而且使用的频率在前端开发过程中也是数一数二的.JS中声明变量的关键字有三个let.var和const,但是三者的使用对比和区别也是非常重要 ...
- Var let const 的区别
Var let const 的区别 变量提升 var 存在变量提升 变量可以在声明之前调用 但是值为undefined. let ,const 不存在变量提升.他们声明的变量必须在声明后调用 如果在之 ...
- Js中var,let,const的区别
一:区别: 1.var声明的变量属于函数作用域,而let和const声明的变量属于块级作用域:(js作用域在上篇文章) 2.var声明的变量存在变量提升,而let和const没有 3.var声明的变量 ...
- 红宝书系列之 var let const 的区别
目录 声明风格及最佳实践 var 关键字 1. var 使用 2. var 声明作用域 3. var 声明提升 let 声明 1. let 作用域 2. 暂时性死区 3. 全局声明(网易前端笔试题) ...
- 微信小程序var,let,const的区别
var 用var的方式声明的变量,为全局变量 let 声明块级变量,即局部变量 const 用于声明常量,也具有块级作用域 const PI=3.14;
- 关键字—final static const的区别
关键字 解释 修饰类 修饰方法 修饰变量 final:终态 这个关键字的含义是"这是无法改变的"或者"终态的": 这个类不能被继承,这个类的所有方法都是fina ...
- mysql声明变量关键字_声明变量的关键字
查询查看: 静态关键字static 同时在类中声明常量的关键字( 关键字final) 静态关键字static的作用 1,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内 ...
- ES6——let、const和var的用法和区别
ES6 新增了let命令,用来声明变量,新增了const命令,用来声明常量,它们的用法类似于var. let a = 1; var b = 2; const PI = 3.14; 主要区别 块级作用域 ...
最新文章
- 信号、系统与滤波器设计(matlab)
- MobX快速入门教程(重要概念讲解)
- dnf公共频道服务器不稳定已从初始化状态,DNF公共频道跨区列表 组队连不上必看...
- 我两小时学完指针,你学会数组/指针与函数需要多久?
- 软件测试的基础知识(六)
- Linux 驱动之内核定时器
- Scala学习07——隐式转换
- [C# 网络编程系列]:TCP编程
- php 过滤绕过注入,PHPB2B注入#1(绕过过滤)
- 计算机毕业设计(附源码)python兴澜幼儿园管理系统
- 局域网中的通信协议及选择简述。
- 常见的网上商城系统开发语言有哪些?
- 20164305徐广皓 - Exp1 PC平台逆向破解(5)M
- 计算机二级考试题库vb知识点,国家计算机二级考试题库 VB上机试题第13套
- springboot项目部署到服务器第三步部署java环境(最白教程)
- Not registered via @EnableConfigurationProperties or marked as Spring component
- 基于Visual C#2010开发Windows7应用 多点触摸图片处理应用程序(1)-同时处理多张图片...
- CCleaner 下载使用
- 基于qt:五子棋游戏
- linux系统开机过程
热门文章
- python画图配色_python matplotlib包图像配色方案
- matlab 收敛速度,BP网络的收敛速度和设计步骤【转】
- Python 网页爬取图片
- UNI-APP前后端实战课《悦读》
- java new什么意思_java里的new到底是什么意思?
- 关于需求响应式公共交通的那些事(上)
- NDoc1.3.1使用手册
- java 读取手机sd卡_获取Android手机中SD卡内存信息
- 抛物线公式即辛卜生(Simpson)公式的数值积分的Python程序
- 数值积分——梯形公式和Simpson公式