JavaScript中var let const的用法有哪些区别
作者:daixiangcn 发布时间:2024-05-09 15:06:33
1.重复声明
var支持重复声明,let、const不支持重复声明。
1.1 var
var a = 1;
var a = 2;
console.log(a);
输出结果:
2
1.2 let
let b = 3;
let b = 4;
console.log(b);
输出结果:
Uncaught SyntaxError: Identifier 'b' has already been declared
1.3 const
const c = 5;
const c = 6;
console.log(c);
输出结果:
Uncaught SyntaxError: Identifier 'c' has already been declared
2.变量提升
var支持变量提升,但是只提升声明不提升值。let、const不支持变量提升。
2.1 var
a=2;
console.log(a);
var a = 1;
输出结果:
2
2.2 let
a=2;
console.log(a);
let a = 1;
输出结果:
Uncaught ReferenceError: Cannot access 'a' before initialization at index.html:28
2.3 const
a=2;
console.log(a);
const a = 1;
输出结果:
Uncaught ReferenceError: Cannot access 'a' before initialization at index.html:28
3.暂时性死区
var不存在暂时性死区,let、const存在暂时性死区。
只要作用域内存在let、const,它们所声明的变量或常量就自动“绑定”在这个区域,不再受外部作用域影响。
3.1 var
var a = 1;
function fun() {
console.log(a);
var a = 2;
}
fun();
输出结果:
undefined
3.2 let
let a = 1;
function fun() {
console.log(a);
let a = 2;
}
fun();
输出结果:
Uncaught ReferenceError: Cannot access 'a' before initialization
3.3 conset
let a = 1;
function fun() {
console.log(a);
const a = 2;
}
fun();
输出结果:
Uncaught ReferenceError: Cannot access 'a' before initialization
4. window对象的属性和方法
全局作用域中,var声明的变量、通过function声明的函数,会自动变成window对象的属性和方法。
var a = 1;
function add() { };
console.log(window.a === a);
console.log(window.add === add);
输出结果:
true
true
5.块级作用域
var没有块级作用域,let、const有块级作用域。
使用var
在for循环中定义变量i:
for (var i = 0; i < 3; i++) {
// console.log(i);
}
console.log(i);
输出结果:
3
使用let
在for循环中定义变量i:
for (let i = 0; i < 3; i++) {
// console.log(i);
}
console.log(i);
输出结果:
Uncaught ReferenceError: i is not defined
来源:https://blog.csdn.net/yuanxiang01/article/details/120828446


猜你喜欢
- count()方法返回obj出现在列表的次数。语法以下是count()方法的语法:list.count(obj)参数
- 本博客实现将自己训练保存的ckpt模型转换为pb文件,该方法适用于任何ckpt模型,当然你需要确定ckp
- 1、除法相关在python3之前,print 13/4 #result=3然而在这之后,却变了!print(13 / 4) #r
- 什么是POP3、SMTP和MAP?POP3是Post Office Protocol 3的简称,即邮局协议的第三个版本,他是规定怎样将个人计
- 1、基本原理访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY浏览器开启定时轮询服务器,确认KEY对应的扫码结果用户使用ap
- 前言select作为Go chan通信的重要监听工具,有着很广泛的使用场景。select的使用主要是搭配通信case使用,表面上看,只是简单
- 一个日历控件,这是官方说明,,供大家参考,具体内容如下首先引入css样式<!--引入bootstrap 和bootstrap-date
- vue3 表单验证前言表单验证可以有效的过滤不合格的数据,减少服务器的开销,并提升用户的使用体验。今天我们使用 vue3 来做一个表单验证的
- 不到40天,ChatGPT的日活量已突破千万!而当年同样引起轰动的Instagram达到这一成就足足花了355天。这代表着我们正在广泛且快速
- 一个 MySQL 表可以看作是一个队列,每一行为一个元素。每次查询得到满足某个条件的最前面的一行,并将它从表中删除或者改变它的状态,使得下次
- 本文记录了mysql 5.7.21 安装配置方法,分享给大家。1.下载安装包下面是官网windows系统的mysql下载地址Mysql下载地
- 一、使用MySql进行持久化存储在任何应用中,都需要持久化存储。一般有 3 种基础的存储机制:文件、数据库系统以及一些混合类型。这种混合类型
- 本文是基于Apache poi类实现的批量导入读取Excel文件,所以要先引入Apache poi的依赖<dependency>
- ①差集方法一:if __name__ == '__main__':a_list = [{'a' : 1},
- Python实现新版正方系统滑动验证码识别算法和方案步骤一:点击数据分析点击滑动按钮,将发送一个请求到 /zfcaptchaLogin请求内
- 一、单因素分析线性拟合功能:线性拟合,单因素分析,对散点图进行线性拟合,并放大散点图的局部位置输入:某个xlsx文件,包含'患者密度
- 在/etc/profile.d/简历oracle.sh内容如下在NLS_LANG设置编码ORACLE_HOME=/usr/lib/oracl
- 前言我已经使用ES2015(ES6)的语法编写JavaScript程序很久了,并且喜欢上它提供的新特性带来的优雅和简洁。我最习惯的就是不再使
- 本文实例讲述了golang实现http服务器处理静态文件的方法。分享给大家供大家参考,具体如下:新版本更精简:package mainimp
- 前言在做项目的时候一些配置文件都会写在settings配置文件中,今天在研究"州的先生"开源文档写作系统-MrDoc的时