var 声明变量挂载 global、可重复赋值;let/const 不挂载 global、存在 TDZ、禁止重复声明;退出 REPL 才能清除所有绑定。

在 Node.js REPL(Read-Eval-Print Loop)中,var、let、const 的声明行为与标准 JavaScript 执行上下文一致,但它们对 REPL 当前会话周期的影响有明显差异——主要体现在变量是否挂载到全局对象、能否被后续命令直接复用、以及重复声明时的报错时机。
var 声明:自动挂载全局,可跨行覆盖
在 REPL 中使用 var 声明变量,等价于在全局作用域中声明。该变量会成为 global 对象的属性(Node 环境下),因此:
- 可在后续任意行直接访问,无需重新声明
- 允许在同一会话中重复
var x = 1、var x = 2,不会报错(后声明覆盖前值) - 若之前已用
let x或const x声明过同名变量,再执行var x仍会成功(var不受块级死区约束,且作用域规则更宽松)
let 和 const 声明:严格块级作用域,不污染 global
let 和 const 在 REPL 中按 ES6 规范运行:
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 声明的变量不会添加到
global对象上,global.x查不到 - 存在暂时性死区(TDZ):声明前访问(如先写
console.log(x)再写let x = 5)会立即抛出ReferenceError -
禁止重复声明:同一会话中再次输入
let x = 10或const x = 'a',会报SyntaxError: Identifier 'x' has already been declared - 即使在不同行输入,REPL 仍将整个会话视为一个“顶层块级作用域”,所以
let/const的绑定持续有效,直到显式退出或重置
实际交互中的关键现象
这些行为在 REPL 输入过程中会直观体现:
- 输入
let a = 1后,再输a→ 返回1;但输global.a→undefined - 输入
const b = {}后,再输b.foo = 'ok'→ 允许(对象可变);但输b = []→ 报TypeError: Assignment to constant variable - 输入
var c = 1,再输var c = 2→ 安静执行,c变为2;而let c = 3→ 直接报错 - 若某次输入含语法错误(如
let d缺少赋值),该行不会注册变量,也不会影响之前已声明的let/const
退出与重置会话的影响
REPL 本身不提供“清除 let/const 绑定”的命令,但以下操作会终结当前变量生命周期:
- 输入
.exit或按Ctrl+D退出后重启 REPL → 所有var/let/const声明全部丢失 - 输入
.break进入多行模式再退出,不会清除已有绑定 - 没有内置命令能单独删除某个
let或const变量;想重定义必须换变量名,或退出重进

















