千家信息网

es6中let与var的区别有哪些

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"es6中let与var的区别有哪些",在日常操作中,相信很多人在es6中let与var的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"es6
千家信息网最后更新 2026年11月01日es6中let与var的区别有哪些

这篇文章主要介绍"es6中let与var的区别有哪些",在日常操作中,相信很多人在es6中let与var的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"es6中let与var的区别有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

区别:1、let变量有块级作用域,而var变量没有块级作用域;2、var变量存在变量提升(无暂时性死区约束),可以先使用再声明,而let变量不存在变量提升(有暂时性死区约束),必须先声明再使用;3、let变量不能重复声明,而var变量可以。

本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。

ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效(块级作用域),而且有暂时性死区的约束。

先看个var的常见变量提升的面试题目:

题目1:var a = 99;            // 全局变量af();                   // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。 console.log(a);        // a=>99,  此时是全局变量的afunction f() {  console.log(a);      // 当前的a变量是下面变量a声明提升后,默认值undefined  var a = 10;  console.log(a);      // a => 10}// 输出结果:undefined1099

如果以上题目有理解困难的童鞋,请系统的看一下老马的免费JS高级视频教程。

ES6可以用let定义块级作用域变量

在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。
例如:

{   var i = 9;} console.log(i);  // 9

ES6新增的let,可以声明块级作用域的变量。

{   let i = 9;     // i变量只在 花括号内有效!!!} console.log(i);  // Uncaught ReferenceError: i is not defined

let 配合for循环的独特应用

let非常适合用于 for循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。看一个常见的面试题目:

for (var i = 0; i <10; i++) {    setTimeout(function() {  // 同步注册回调函数到 异步的 宏任务队列。    console.log(i);        // 执行此代码时,同步代码for循环已经执行完成  }, 0);}// 输出结果10   共10个// 这里面的知识点: JS的事件循环机制,setTimeout的机制等

如果把 var改成 let声明:

// i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。for (let i = 0; i < 10; i++) {   setTimeout(function() {    console.log(i);    //  i 是循环体内局部作用域,不受外界影响。  }, 0);}// 输出结果:0  1  2  3  4  5  6  7  8 9

let没有变量提升与暂时性死区

用let声明的变量,不存在变量提升。而且要求必须 等let声明语句执行完之后,变量才能使用,不然会报Uncaught ReferenceError错误。

例如:

console.log(aicoder);    // 错误:Uncaught ReferenceError ...let aicoder = 'aicoder.com';// 这里就可以安全使用aicoder

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为"暂时性死区"(temporal dead zone,简称 TDZ)。

let变量不能重复声明

let不允许在相同作用域内,重复声明同一个变量。否则报错:Uncaught SyntaxError: Identifier 'XXX' has already been declared

例如:

let a = 0;let a = 'sss';// Uncaught SyntaxError: Identifier 'a' has already been declared

到此,关于"es6中let与var的区别有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

变量 作用 循环 命令 暂时性 死区 代码 全局 函数 循环体 题目 学习 外界 局部 结果 输出 有效 区块 常见 教程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技活动banner 深圳科技互联网 上海互联网科技有限公司 互联网科技金融公司 中正互联网科技招聘 科技与互联网的利与弊 互联网教育科技公司vipkid 昭通云南众福互联网科技有限公司 互联网企业和科技型企业 湖南诚度互联网科技有限公司 花神(南京)互联网科技有限公司 电子科技大学互联网创业大赛 互联网新科技动漫ppt素材 互联网金融科技名词解释 山东有哪些互联网科技公司 半导体是互联网高科技吗 广州互联网高科技取餐柜 上海同邻互联网科技有限公司规模 西安有哪些互联网高科技企业 瑞安市蟠桃会互联网科技有限公司 广州大一互联网络科技有限公司 紫鲸互联网科技 互联网和黑科技的看法 彤创互联网科技有限公司 语蝶互联网科技有限公司 工业互联网展湾科技股份有限公司 互联网方面的科技前沿 长沙渺峰互联网科技有限公司 兰石爱特工业互联网科技分公司 北京瑞云互联网科技有限公司
0