Node.js REPL中的.clear元命令

时间:2013-09-24 00:23:18

标签: javascript node.js read-eval-print-loop

.clear元命令完全.break元命令相同,还是它的变体?我知道它们都可以用来突破...提示符(表示你还没有完成你的命令)而不退出REPL,这可以通过点击CTRL+C来完成。但.clear.break之间是否存在根本差异?

我已经在很多地方读过,在node.js REPL中,.clear元命令是为了消除你在内存中可能没有重启REPL的任何变量或闭包。< / p>

预期的行为是否可以声明变量,运行.clear命令,再次调用该变量,发现它是空的/非声明的?在我使用.clear命令时,我没有发现它可以工作。

2 个答案:

答案 0 :(得分:6)

.break.clear命令的行为会有所不同,具体取决于您是从node命令启动REPL还是使用repl.start()

使用node命令时,.clear只是.break的别名。但是,如果您从repl.start()启动REPL,则.clear将按照您的预期清除本地上下文,.break的行为符合规定。

这是.helpnode开始的REPL实例看起来的样子:

.break  Sometimes you get stuck, this gets you out
.clear  Alias for .break
.exit   Exit the repl
.help   Show repl options
.load   Load JS from a file into the REPL session
.save   Save all evaluated commands in this REPL session to a file

这是以编程方式启动时的样子:

.break  Sometimes you get stuck, this gets you out
.clear  Break, and also clear the local context
.exit   Exit the repl
.help   Show repl options
.load   Load JS from a file into the REPL session
.save   Save all evaluated commands in this REPL session to a file

在以.clear开头的REPL中使用repl.start()也会显示:

Clearing context...

以下是以编程方式使用REPL的示例:

var repl = require('repl');
var str = 'We can pass variables into a context.';

repl.start().context.str2 = str;

在此之后,我们打开了一个CLI。如果我们输入str2,您将获得str的内容。如果清除上下文,则上下文中将不再存在str2

答案 1 :(得分:1)

感谢@hexacyanide的回答!

这是两个截图。

在第一个屏幕截图中,REPL以编程方式实例化(通过运行repltest.js脚本),因此.clear元命令会从内存中清除变量。您还可以看到.help命令在脚本实例化REPL时为.clear返回不同的行为。

在第二个屏幕截图中,.clear有不同的行为。这里REPL直接通过命令实例化(只需在CMD中运行节点)。在这种情况下,变量不会从内存中清除,.help命令只会告诉我们.clear.break的别名。

instantiated programmatically instantiated via command

再次感谢六氰化物澄清这一点。