नोड में, आप "वैश्विक" या "ग्लोबल" ऑब्जेक्ट के माध्यम से वैश्विक चर सेट कर सकते हैं:
GLOBAL._ = require('underscore'); // but you "shouldn't" do this! (see note below)
या अधिक उपयोगी ...
GLOBAL.window = GLOBAL; // like in the browser
नोड स्रोत से, आप देख सकते हैं कि ये एक दूसरे के लिए अलियास हैं:
node-v0.6.6/src/node.js:
28: global = this;
128: global.GLOBAL = global;
उपरोक्त कोड में, "यह" वैश्विक संदर्भ है। सामान्यजेएस मॉड्यूल सिस्टम (जो नोड उपयोग करता है) के साथ, मॉड्यूल के अंदर "यह" वस्तु (यानी, "आपका कोड") वैश्विक संदर्भ नहीं है। इसके प्रमाण के लिए, नीचे देखें कि मैंने "यह" ऑब्जेक्ट कहाँ और इसके बाद "ग्लोबल" ऑब्जेक्ट को देखा।
console.log("\nTHIS:");
console.log(this);
console.log("\nGLOBAL:");
console.log(global);
/* outputs ...
THIS:
{}
GLOBAL:
{ ArrayBuffer: [Function: ArrayBuffer],
Int8Array: { [Function] BYTES_PER_ELEMENT: 1 },
Uint8Array: { [Function] BYTES_PER_ELEMENT: 1 },
Int16Array: { [Function] BYTES_PER_ELEMENT: 2 },
Uint16Array: { [Function] BYTES_PER_ELEMENT: 2 },
Int32Array: { [Function] BYTES_PER_ELEMENT: 4 },
Uint32Array: { [Function] BYTES_PER_ELEMENT: 4 },
Float32Array: { [Function] BYTES_PER_ELEMENT: 4 },
Float64Array: { [Function] BYTES_PER_ELEMENT: 8 },
DataView: [Function: DataView],
global: [Circular],
process:
{ EventEmitter: [Function: EventEmitter],
title: 'node',
assert: [Function],
version: 'v0.6.5',
_tickCallback: [Function],
moduleLoadList:
[ 'Binding evals',
'Binding natives',
'NativeModule events',
'NativeModule buffer',
'Binding buffer',
'NativeModule assert',
'NativeModule util',
'NativeModule path',
'NativeModule module',
'NativeModule fs',
'Binding fs',
'Binding constants',
'NativeModule stream',
'NativeModule console',
'Binding tty_wrap',
'NativeModule tty',
'NativeModule net',
'NativeModule timers',
'Binding timer_wrap',
'NativeModule _linklist' ],
versions:
{ node: '0.6.5',
v8: '3.6.6.11',
ares: '1.7.5-DEV',
uv: '0.6',
openssl: '0.9.8n' },
nextTick: [Function],
stdout: [Getter],
arch: 'x64',
stderr: [Getter],
platform: 'darwin',
argv: [ 'node', '/workspace/zd/zgap/darwin-js/index.js' ],
stdin: [Getter],
env:
{ TERM_PROGRAM: 'iTerm.app',
'COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/DDOPSON/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET': '/tmp/launch-nNl1vo/ServiceProcessSocket',
TERM: 'xterm',
SHELL: '/bin/bash',
TMPDIR: '/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/',
Apple_PubSub_Socket_Render: '/tmp/launch-9Ga0PT/Render',
USER: 'ddopson',
COMMAND_MODE: 'unix2003',
SSH_AUTH_SOCK: '/tmp/launch-sD905b/Listeners',
__CF_USER_TEXT_ENCODING: '0x12D732E7:0:0',
PATH: '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/usr/X11/bin',
PWD: '/workspace/zd/zgap/darwin-js',
LANG: 'en_US.UTF-8',
ITERM_PROFILE: 'Default',
SHLVL: '1',
COLORFGBG: '7;0',
HOME: '/Users/ddopson',
ITERM_SESSION_ID: 'w0t0p0',
LOGNAME: 'ddopson',
DISPLAY: '/tmp/launch-l9RQXI/org.x:0',
OLDPWD: '/workspace/zd/zgap/darwin-js/external',
_: './index.js' },
openStdin: [Function],
exit: [Function],
pid: 10321,
features:
{ debug: false,
uv: true,
ipv6: true,
tls_npn: false,
tls_sni: true,
tls: true },
kill: [Function],
execPath: '/usr/local/bin/node',
addListener: [Function],
_needTickCallback: [Function],
on: [Function],
removeListener: [Function],
reallyExit: [Function],
chdir: [Function],
debug: [Function],
error: [Function],
cwd: [Function],
watchFile: [Function],
umask: [Function],
getuid: [Function],
unwatchFile: [Function],
mixin: [Function],
setuid: [Function],
setgid: [Function],
createChildProcess: [Function],
getgid: [Function],
inherits: [Function],
_kill: [Function],
_byteLength: [Function],
mainModule:
{ id: '.',
exports: {},
parent: null,
filename: '/workspace/zd/zgap/darwin-js/index.js',
loaded: false,
exited: false,
children: [],
paths: [Object] },
_debugProcess: [Function],
dlopen: [Function],
uptime: [Function],
memoryUsage: [Function],
uvCounters: [Function],
binding: [Function] },
GLOBAL: [Circular],
root: [Circular],
Buffer:
{ [Function: Buffer]
poolSize: 8192,
isBuffer: [Function: isBuffer],
byteLength: [Function],
_charsWritten: 8 },
setTimeout: [Function],
setInterval: [Function],
clearTimeout: [Function],
clearInterval: [Function],
console: [Getter],
window: [Circular],
navigator: {} }
*/
** नोट: "GLOBAL._" सेट करने के बारे में, सामान्य तौर पर आपको बस करना चाहिए var _ = require('underscore');
। हां, आप ऐसा हर एक फाइल में करते हैं जो अंडरस्कोर का उपयोग करता है, ठीक उसी तरह जैसे जावा में आप करते हैं import com.foo.bar;
। इससे यह पता लगाना आसान हो जाता है कि आपका कोड क्या कर रहा है क्योंकि फाइलों के बीच लिंक 'स्पष्ट' हैं। हल्का कष्टप्रद, लेकिन एक अच्छी बात है। .... यही उपदेश है।
हर नियम का एक अपवाद है। मेरे पास ठीक एक उदाहरण है जहां मुझे "GLOBAL._" सेट करने की आवश्यकता थी। मैं "कॉन्फिग" फाइलों को परिभाषित करने के लिए एक सिस्टम बना रहा था जो मूल रूप से JSON थे, लेकिन थोड़ा अधिक लचीलेपन की अनुमति देने के लिए "JS में लिखे गए" थे। इस तरह की कॉन्फिग फाइलों में किसी 'स्टेटमेंट' की आवश्यकता नहीं होती थी, लेकिन मैं चाहता था कि अंडरस्कोर (ENTIRE सिस्टम को अंडरस्कोर और अंडरस्कोर टेम्प्लेट) पर एक्सेस किया जाए, इसलिए "कॉन्फिगरेशन" का मूल्यांकन करने से पहले, मैं "GLALAL__" सेट करूंगा। तो हाँ, हर नियम के लिए, कहीं न कहीं एक अपवाद है। लेकिन आपके पास बेहतर रूप से एक अच्छा कारण था और न केवल "मैं टाइप करने के लिए थक गया 'आवश्यकता' इसलिए मैं सम्मेलन के साथ तोड़ना चाहता हूं"।