此腳本具有不同的行爲,具體取決於它是從節點js shell運行還是存儲在傳遞給節點的腳本文件中。爲什麼函數在全局對象中不可用?
腳本:
var a = 1;
function b(){return 1;}
for(var k in global) console.log(k);
在殼輸出(僅最後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
:當作爲保存的腳本(bash中,從Mac OS X上稱爲
node myscript.js
)運行
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
輸出
爲什麼它們有什麼不同,爲什麼不能我的腳本看到global
a
和b
?
編輯:添加一個附加語句C = 2發生變化的輸出。 c在運行腳本的兩種方法中都可見。儘管如此,這仍然不能解釋a和b的存在。
您可以添加到您的實驗:1)一個變量賦值沒有'var':所以只是做一個'C = 3'; 2)'console.log(this === global)' –
您還可以詳細說明如何將這些文件傳遞給Node? (確切的命令行) –
完成。還有其他什麼? – Trindaz