let和var声明变量有什么不同

let 和 var 声明变量有什么不同?一文讲清作用域、提升与闭包陷阱

在 JavaScript 中,var 是 ES5 时代唯一的变量声明方式 ,而 let 是 ES6 引入的新语法,两者看似只是关键字替换,实则在作用域 、变量提升、重复声明、全局对象绑定等方面存在本质差异 ,理解这些差异,是写出可预测 、少 Bug 的现代 JavaScript 代码的基础。

作用域不同:函数作用域 vs 块级作用域

这是两者最核心的区别 。

var 声明的变量属于函数作用域(function scope),即变量在整个函数内部都可见 ,甚至能穿透 if、for 等语句块:

function test() {
  if (true) {
    var a = 1;
  }
  console.log(a); // 1,块外仍可访问
}

let 声明的变量属于块级作用域(block scope),只在最近的一对花括号 内有效:

let和var声明变量有什么不同

function test() {
  if (true) {
    let b = 1;
  }
  console.log(b); // ReferenceError: b is not defined
}

块级作用域带来的直接好处是避免了变量“泄漏”到外层,也让 for 循环中的计数器行为更符合直觉:

for (var i = 0; i < 3; i++) {}
console.log(i); // 3	,var 泄漏到外层
for (let j = 0; j < 3; j++) {}
console.log(j); // ReferenceError

变量提升行为不同

两者都会被“提升 ”,但表现截然不同。

var 声明会被提升到所在函数(或全局)作用域的顶部,且初始值为 undefined,因此可以在声明之前访问:

console.log(x); // undefined
var x = 10;

let 同样存在提升,但变量会进入暂时性死区(Temporal Dead Zone ,TDZ),在声明语句执行之前访问它,会直接抛出 ReferenceError:

let和var声明变量有什么不同

console.log(y); // ReferenceError: Cannot access 'y' before initialization
let y = 10;

TDZ 的存在让“先用后声明”的错误更早暴露 ,而不是悄悄得到一个 undefined,这对排查问题非常有帮助。

重复声明规则不同

var 允许在同一作用域内重复声明同名变量,后一次声明会覆盖前一次:

var a = 1;
var a = 2;
console.log(a); // 2

let 不允许在同一作用域内重复声明,会直接报语法错误:

let b = 1;
let b = 2; // SyntaxError: Identifier 'b' has already been declared

这一限制能有效防止无意间的变量覆盖,尤其在多人协作的大型项目中意义重大 。

let和var声明变量有什么不同

与全局对象的关系不同

在浏览器环境下,顶层 var 声明的变量会成为 window 对象的属性,而 let 不会:

var g1 = 1;
let g2 = 2;
console.log(window.g1); // 1
console.log(window.g2); // undefined

这意味着 let 声明的全局变量不会污染全局对象 ,也不会与 window 上已有的属性(如 name、length)发生冲突。

闭包与循环中的经典陷阱

var 在循环中只有一个共享的绑定,配合异步回调时会出现“所有回调拿到同一个值”的经典问题:

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 0);
}
// 输出:3 3 3

而 let 在每次循环迭代时都会创建一个新的绑定,因此能正确捕获当次的值:

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 0);
}
// 输出:0 1 2

这是 let 常被推荐用于循环计数器的直接原因。

总结对比表

特性 var let
作用域 函数作用域 块级作用域
变量提升 提升,初始值 undefined 提升但存在 TDZ ,访问报错
重复声明 允许 不允许
绑定全局对象 是(浏览器中为 window) 否
循环闭包 共享同一绑定 每次迭代新绑定

let 在作用域控制 、错误提示和闭包行为上都优于 var ,在现代 JavaScript 开发中,应优先使用 let(需要常量时使用 const),仅在维护旧代码或确有特殊需求时才考虑 var ,理解两者的差异,不仅能帮你避开那些隐蔽的作用域与提升陷阱,也能让代码更清晰 、更安全 。

标签:

相关推荐

  • 金砖五国中谁是老大?

    金砖五国中谁是老大?

    金砖五国中谁是老大?——一场没有“队长”的合唱“金砖五国中谁是老大?”这个问题,几乎每隔一段时间就会在国际舆论场中冒出来,有人下意识看向中国,毕竟论经济总量、贸易规模、工业产能,中国在金砖国家中确实一骑绝尘;也有人提到俄罗斯,因其军事与能源影响力;还有人认为印度凭借人口红利和地缘位置正迅速追赶,若真的要用“老大”这个词来框定金砖五国的关系,恐怕从...

    2026/11/10
  • 传奇x8值得买吗?

    传奇x8值得买吗?

    传奇X8值得买吗?深度分析告诉你答案最近不少朋友在后台问我:“传奇X8到底值不值得买?”作为近期市场上讨论度颇高的一款产品,传奇X8凭借出色的参数配置和颇具竞争力的定价,吸引了不少消费者的目光,今天我们就从性能、体验、性价比等多个维度来聊聊,这款产品究竟值不值得入手。传奇X8的核心亮点传奇X8之所以能引发关注,首先在于它的硬件配置,它搭载...

    2026/11/10
  • 有哪些轻松的网页游戏呢?

    有哪些轻松的网页游戏呢?

    摸鱼必备:有哪些轻松的网页游戏呢?在快节奏的工作与学习之余,我们常常需要一点小小的调剂来放松紧绷的神经,但很多时候,下载大型游戏太费时间,手机游戏又容易让人沉迷其中无法自拔,这时候,无需下载、即点即玩的“网页游戏”就成了绝佳的选择,有哪些轻松的网页游戏呢?今天就为大家盘点几款适合在碎片时间里打开、随时可以放下的治愈系或休闲类页游。...

    2026/11/10
  • 武林外传江山令任务放弃了还能再领吗?去哪里领?或者怎么回复

    武林外传江山令任务放弃了还能再领吗?去哪里领?或者怎么回复

    武林外传江山令任务放弃了还能再领吗?去哪里领?或者怎么恢复?**在《武林外传》的江湖里闯荡,不少少侠都遇到过这样的尴尬事:做“江山令”任务时,因为背包满了、临时有事、或者单纯手滑点错了选项,一不小心把任务给放弃了,等回过神来,想继续做却发现任务栏里空空如也,心里顿时咯噔一下——这任务放弃了还能再领吗?去哪里领?或者怎么恢复?别慌,今天咱们就把这件事掰...

    2026/11/10
  • 新手想问点关于怪猎世界冰原太刀的几个问题?

    新手想问点关于怪猎世界冰原太刀的几个问题?

    新手想问点关于怪猎世界冰原太刀的几个问题?大家好,我是刚入坑冰原的太刀新手,本体通关后一路打到冰原,最近越玩越觉得太刀这武器水很深,攒了一堆问题想请教各位老猎人,先说说我的情况:本体基本靠瞎砍通关,到了冰原被各种怪教育,尤其是打到冰牙龙的时候差点摔手柄,下面这些问题可能有些基础,但还是希望大佬们不吝赐教。第一个问题:太刀在冰原的核心输出思路到底是什么...

    2026/11/10
  • 剑侠情缘零是端游还是手游?

    剑侠情缘零是端游还是手游?

    剑侠情缘零是端游还是手游?一文说清它的真实平台与玩法定位最近不少玩家在问:“剑侠情缘零是端游还是手游?”这个问题看似简单,但背后其实牵扯到对这款游戏平台归属、操作逻辑以及目标用户群体的理解,今天我们就来把这件事彻底说清楚。首先直接回答核心问题:《剑侠情缘零》目前是一款以移动端(手游)为核心平台的产品,但它并非传统意义上只能手机玩的“纯手游”,...

    2026/11/10
  • 剑侠情缘零是什么类型的游戏?

    剑侠情缘零是什么类型的游戏?

    剑侠情缘零是什么类型的游戏?一文读懂它的核心定位与玩法《剑侠情缘零》是西山居旗下“剑侠情缘”系列的最新作品,自公布以来便吸引了大量系列老玩家与新用户的关注,剑侠情缘零是什么类型的游戏?它是一款以东方武侠为背景的3D角色扮演类游戏(RPG),但在具体玩法设计上,它又融合了多种细分品类的特征,形成了自己独特的定位。从基础品类来看,《剑侠情...

    2026/11/10
  • 神武仙踪在哪里能看?

    神武仙踪在哪里能看?

    神武仙踪在哪里能看?完整观看指南与平台汇总《神武仙踪》作为一部备受关注的玄幻题材作品,不少观众和读者都在问:神武仙踪在哪里能看?本文将为你梳理目前可用的观看渠道,并附上一些实用建议,帮你快速找到资源。先确认你想看的是哪种版本《神武仙踪》在不同语境下可能指代不同内容——它可能是一部网络小说、一部动漫(动画短剧/动态漫画),也可能是某平台推...

    2026/11/10
  • 赛尔号卡片混沌埃兰多少钱?

    赛尔号卡片混沌埃兰多少钱?

    赛尔号卡片混沌埃兰多少钱?——一张卡背后的情怀与市场真相在赛尔号卡牌收藏圈里,时不时会有新人或回归玩家抛出同一个问题:“赛尔号卡片混沌埃兰多少钱?”看似简单的一句话,背后却牵扯出实体卡牌的版本差异、稀有度浮动、交易渠道以及玩家情怀等多重因素,今天我们就来认真聊一聊这张卡的价格问题,顺便把“混沌埃兰”在卡牌市场里的定位说清楚。首先需要明...

    2026/11/10
  • 2025年腾讯电脑管家怎么系统重装?

    2025年腾讯电脑管家怎么系统重装?

    2025年腾讯电脑管家怎么系统重装?手把手教你安全便捷的官方方案随着2025年的到来,电脑系统经过长时间使用后难免出现卡顿、蓝屏或软件冲突等问题,系统重装成为不少用户恢复电脑活力的选择,腾讯电脑管家作为国内主流的系统工具,在2025年版本中进一步优化了系统重装功能,提供了更智能、更安全的操作路径,下面就来详细解答“2025年腾讯电脑管家怎么系统重...

    2026/11/10
返回顶部