有人能帮我理解以下行为吗?我期望,由于我可以从这个回调函数内部设置全局变量f
,所以我也应该能够更改它。我不太理解node在REPL中处理上下文和全局的方式,希望能得到任何见解。
启动一个没有useGlobal
选项的REPL。
$ cat test.js
var repl = require('repl');
repl.start({useGlobal:false});
现在尝试连续两次设置
f
:$ node test.js
> f
ReferenceError: f is not defined
> setTimeout(function(){f=1;}, 0);
> f
1
第一次可以正常工作……现在再试一次:
> setTimeout(function(){f=2;}, 0);
> f
1
哦!
第一次运行设置它; 第二次不影响它。
(设置useGlobal
:true
,我得到了我期望的行为。)
!function(){f = 2}();
按预期工作。我不知道...也许是个bug? - Luca RainoneuseGlobal
设置为 true,则 repl 将使用全局对象,而不是在单独的上下文中运行脚本。我想这可能与this
有关(也许是低级错误)。 - Luca Rainone