该脚本具有不同的行为,具体取决于它是从 node js shell 运行还是存储在传递给 node.js 的脚本文件中。
脚本:
var a = 1;
function b(){return 1;}
for(var k in global) console.log(k);
shell 中的输出(只有最后 4 行与 IMO 相关。3 行中的每一行都按顺序复制/粘贴到在 Mac OS X 上的终端中运行的节点 REPL 实例中):
ArrayBuffer
Int8Array
Uint8Array
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
DataView
global
process
GLOBAL
root
Buffer
setTimeout
setInterval
clearTimeout
clearInterval
console
module
require
a
_
b
k
作为保存脚本运行时的输出(node myscript.js
在 Mac OS X 上从 bash 调用):
ArrayBuffer
Int8Array
Uint8Array
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
DataView
global
process
GLOBAL
root
Buffer
setTimeout
setInterval
clearTimeout
clearInterval
console
为什么它们不同,为什么我的脚本看不到a
and b
in global
?
编辑:添加附加语句 c = 2 更改了输出。c 在运行脚本的两种方法中都是可见的。但是,这仍然不能解释从 shell 运行脚本时 a 和 b 的存在。