Этот сценарий имеет другое поведение, основанное на том, запущен ли он из оболочки js узла или сохранен в файле сценария, переданном узлу.Почему функции недоступны в глобальном объекте?
Сценарий:
var a = 1;
function b(){return 1;}
for(var k in global) console.log(k);
Выход в оболочке (только последние 4 строки актуальны IMO Каждый из 3-х строк были копировать/вставить последовательно в экземпляр узла REPL работает в терминале на Mac OS X.):
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):
ArrayBuffer
Int8Array
Uint8Array
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
DataView
global
process
GLOBAL
root
Buffer
setTimeout
setInterval
clearTimeout
clearInterval
console
Почему они разные, и почему мой сценарий не видит a
и b
в global
?
EDIT: добавление дополнительной инструкции c = 2 изменило выход. c был видимым в обоих методах запуска скрипта. Это все еще не объясняет присутствие a и b при запуске скрипта из оболочки.
Можете ли вы добавить в свой эксперимент: 1) Назначение переменной без 'var': Так что просто сделайте' c = 3'; 2) 'console.log (this === global)' –
Можете ли вы также подробно описать, как вы передаете эти файлы в узел? (Точные командные строки) –
Выполнено. Что-нибудь еще? – Trindaz