node repl 中的下划线 _ 保存上一个完整表达式的求值结果,如 x = 10 得 _ === 10,而 var x = 10 得 _ === undefined;它支持链式调用、赋值复用,但 console.log(_) 会将其覆盖为 undefined,且不参与变量修改或语法错误恢复。

Node REPL 中的下划线 _ 是一个特殊变量,它自动保存上一次表达式执行后的返回值,不是上一条语句的变量名,也不是历史命令的别名,而是实实在在的运行时结果引用。
下划线\_到底存的是什么
它保存的是上一个完整表达式(非声明语句)的求值结果。注意区分:
-
var x = 10返回undefined,所以_就是undefined -
x = 10(无 var)返回10,_就是10 -
[1,2,3].length返回3,_就是3 -
console.log('hi')返回undefined,_也会被覆盖为undefined
常见用法示例
直接复用、链式调用或赋值都很自然:
- 快速累加:
5 + 7→ 输出12,接着输入_ * 2得到24 - 取数组长度:
['a','b','c']→ 输出数组,再输_.length→3 - 转字符串:
42 + 8→50,再输_.toString(16)→"32" - 保存结果:
Math.random()→ 得到一个浮点数,再输const r = _就把随机数存进变量r
需要注意的边界情况
_ 行为稳定,但容易因误操作失效:
- 多行输入(如函数、对象字面量)中按
.break或.clear后,_不会重置,仍保留之前最后一次有效表达式的结果 -
console.log(_)本身是一次表达式,会把_更新为undefined,后续再用_就不是原来那个值了 -
_不能用于修改原始变量,比如a = 5; _ += 1不会改变a的值,只是让_变成6 - 如果上一条是语法错误或未完成表达式,
_不变,仍为前一次成功结果
配合 REPL 命令提升效率
把 _ 和内置命令组合使用,调试更顺手:
- 用
.save session.js保存含_使用过程的会话,便于回溯逻辑 - 按上下箭头调出历史命令后,可直接在末尾加
; _快速查看上次结果 - 输入
.help查看全部命令时,_本身不列在其中,但它始终可用 - tab 键补全时不会提示
_,但它始终存在于作用域顶层,随时可输











