nodejsの旅-003-基礎知識-大域作用域と大域関数

8814 ワード

グローバルスコープとグローバル関数
Nodejsでは、1つのモジュールで定義された変数、方法はこのモジュールでのみ利用可能ですが、exportオブジェクトの使用によってモジュールの外部に転送されても良いです.しかし、まだグローバルスコープが存在しています.モジュールをロードする必要がなくても変数、関数、クラスを使用できます.
グローバルスコープ
Nodejsでglobalオブジェクトを定義し、Nodejsのグローバル名前空間を表しています.
console.log(global);
{ ArrayBuffer: [Function: ArrayBuffer],
  Int8Array: { [Function: Int8Array] BYTES_PER_ELEMENT: 1 },
  Uint8Array: { [Function: Uint8Array] BYTES_PER_ELEMENT: 1 },
  Uint8ClampedArray: { [Function: Uint8ClampedArray] BYTES_PER_ELEMENT: 1 },
  Int16Array: { [Function: Int16Array] BYTES_PER_ELEMENT: 2 },
  Uint16Array: { [Function: Uint16Array] BYTES_PER_ELEMENT: 2 },
  Int32Array: { [Function: Int32Array] BYTES_PER_ELEMENT: 4 },
  Uint32Array: { [Function: Uint32Array] BYTES_PER_ELEMENT: 4 },
  Float32Array: { [Function: Float32Array] BYTES_PER_ELEMENT: 4 },
  Float64Array: { [Function: Float64Array] BYTES_PER_ELEMENT: 8 },
  DataView: [Function: DataView],
  DTRACE_NET_SERVER_CONNECTION: [Function],
  DTRACE_NET_STREAM_END: [Function],
  DTRACE_NET_SOCKET_READ: [Function],
  DTRACE_NET_SOCKET_WRITE: [Function],
  DTRACE_HTTP_SERVER_REQUEST: [Function],
  DTRACE_HTTP_SERVER_RESPONSE: [Function],
  DTRACE_HTTP_CLIENT_REQUEST: [Function],
  DTRACE_HTTP_CLIENT_RESPONSE: [Function],
  global: [Circular],
  process: 
   { title: 'node',
     version: 'v0.10.32',
     moduleLoadList: 
      [ 'Binding evals',
        'Binding natives',
        'NativeModule events',
        'NativeModule buffer',
        'Binding buffer',
        'NativeModule assert',
        'NativeModule util',
        'NativeModule module',
        'NativeModule path',
        'NativeModule tty',
        'NativeModule net',
        'NativeModule stream',
        'NativeModule _stream_readable',
        'NativeModule _stream_writable',
        'NativeModule _stream_duplex',
        'NativeModule _stream_transform',
        'NativeModule _stream_passthrough',
        'NativeModule timers',
        'Binding timer_wrap',
        'NativeModule _linklist',
        'Binding cares_wrap',
        'Binding tty_wrap',
        'NativeModule vm',
        'NativeModule fs',
        'Binding fs',
        'Binding constants',
        'NativeModule readline',
        'NativeModule console',
        'Binding signal_wrap',
        'NativeModule string_decoder' ],
     versions: 
      { http_parser: '1.0',
        node: '0.10.32',
        v8: '3.14.5.9',
        ares: '1.9.0-DEV',
        uv: '0.10.28',
        zlib: '1.2.3',
        modules: '11',
        openssl: '1.0.1i' },
     arch: 'x64',
     platform: 'darwin',
     argv: [ 'node' ],
     execArgv: [],
     env: 
      { SHELL: '/bin/bash',
        TERM: 'xterm-256color',
        TMPDIR: '/var/folders/8m/338n1zwx6b54drwph5s0hq780000gn/T/',
        Apple_PubSub_Socket_Render: '/private/tmp/com.apple.launchd.u8dfW4kGIc/Render',
        OLDPWD: '/Users/wanq/WebstormProjects/NodejsPro',
        USER: 'wanq',
        SSH_AUTH_SOCK: '/private/tmp/com.apple.launchd.wfqCjimqs6/Listeners',
        __CF_USER_TEXT_ENCODING: '0x1F5:0x19:0x34',
        PATH: '/Users/wanq/DevTools/mongodb/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
        PWD: '/Users/wanq/WebstormProjects/NodejsPro/lesson002',
        XPC_FLAGS: '0x0',
        XPC_SERVICE_NAME: '0',
        SHLVL: '1',
        HOME: '/Users/wanq',
        LOGNAME: 'wanq',
        LC_CTYPE: 'zh_CN.UTF-8',
        _: '/usr/local/bin/node' },
     pid: 9514,
     features: 
      { debug: false,
        uv: true,
        ipv6: true,
        tls_npn: true,
        tls_sni: true,
        tls: true },
     _needImmediateCallback: false,
     execPath: '/usr/local/bin/node',
     debugPort: 5858,
     _getActiveRequests: [Function],
     _getActiveHandles: [Function],
     _needTickCallback: [Function],
     reallyExit: [Function],
     abort: [Function],
     chdir: [Function],
     cwd: [Function],
     umask: [Function],
     getuid: [Function],
     setuid: [Function],
     setgid: [Function],
     getgid: [Function],
     getgroups: [Function],
     setgroups: [Function],
     initgroups: [Function],
     _kill: [Function],
     _debugProcess: [Function],
     _debugPause: [Function],
     _debugEnd: [Function],
     hrtime: [Function],
     dlopen: [Function],
     uptime: [Function],
     memoryUsage: [Function],
     binding: [Function],
     _usingDomains: [Function],
     _tickInfoBox: { '0': 1, '1': 0, '2': 0 },
     _events: { SIGWINCH: [Function] },
     domain: null,
     _maxListeners: 10,
     EventEmitter: { [Function: EventEmitter] listenerCount: [Function] },
     _fatalException: [Function],
     _exiting: false,
     assert: [Function],
     config: { target_defaults: [Object], variables: [Object] },
     nextTick: [Function: nextTick],
     _currentTickHandler: [Function: _nextTick],
     _nextDomainTick: [Function: _nextDomainTick],
     _tickCallback: [Function: _tickCallback],
     _tickDomainCallback: [Function: _tickDomainCallback],
     _tickFromSpinner: [Function: _tickFromSpinner],
     maxTickDepth: 1000,
     stdout: [Getter],
     stderr: [Getter],
     stdin: [Getter],
     openStdin: [Function],
     exit: [Function],
     kill: [Function],
     addListener: [Function],
     on: [Function],
     removeListener: [Function] },
  GLOBAL: [Circular],
  root: [Circular],
  Buffer: 
   { [Function: Buffer]
     isEncoding: [Function],
     poolSize: 8192,
     isBuffer: [Function: isBuffer],
     byteLength: [Function],
     concat: [Function] },
  setTimeout: [Function],
  setInterval: [Function],
  clearTimeout: [Function],
  clearInterval: [Function],
  setImmediate: [Function],
  clearImmediate: [Function],
  console: [Getter],
  module: 
   { id: 'repl',
     exports: 
      { writer: [Object],
        _builtinLibs: [Object],
        REPLServer: [Object],
        start: [Function],
        repl: [Object] },
     parent: undefined,
     filename: '/Users/wanq/WebstormProjects/NodejsPro/lesson002/repl',
     loaded: false,
     children: [],
     paths: 
      [ '/Users/wanq/WebstormProjects/NodejsPro/lesson002/repl/node_modules',
        '/Users/wanq/WebstormProjects/NodejsPro/lesson002/node_modules',
        '/Users/wanq/WebstormProjects/NodejsPro/node_modules',
        '/Users/wanq/WebstormProjects/node_modules',
        '/Users/wanq/node_modules',
        '/Users/node_modules',
        '/node_modules' ] },
  require: 
   { [Function: require]
     resolve: [Function],
     main: undefined,
     extensions: { '.js': [Function], '.json': [Function], '.node': [Function] },
     registerExtension: [Function],
     cache: {} } }
set Timeout関数とclearTimeout関数
大域関数setTimeoutの役割は、クライアントjavascriptのsetTimeout関数の役割と類似しており、数ミリ秒遅延して、フィードバック関数を実行する.
set Timeout(cb,ms,[arg],[...])
前の二つのパラメータは必須入力であり、後のことはコールバック関数cbのパラメータとして作用します.
//5    callBackFun
var timer = setTimeout(callBackFun,5000);

//  callBackFun   
clearTimeout(timer);
set Interval関数とclear Interval関数
グローバル関数set Intervalの役割はクライアントjavascriptのsetInterval関数の役割と似ています.タイマーの役割をして、数秒ごとにコールバック関数を実行します.
set Interval(cb,ms,[arg],[...]
同じ最初の二つのパラメータは必須であり、後のパラメータはコールバック関数のパラメータとして作用します.
//  5       callBackFun
var timer = setInterval(callBackFun, 5000);
//  callBackFun   
clearInterval(timer);
タイマーオブジェクトのunref方法とref方法
set Timeout方法とset Interval方法は、タイマーオブジェクトを返します.タイマーオブジェクトにはunref方法とref方法があります.
unrefメソッドは、コールバック関数をキャンセルすることです.
unrefメソッドを呼び出した後、ref方法でタイマーを回復してコールバック関数を呼び出すことができます.
モジュールに関するグローバル関数とオブジェクト
1、require関数を使ってモジュールをロードする
モジュールをロード
var foo = require('../foo.js');

var http = require('http');
testModule.js
/**
 * Created by wanq on 14/11/13.
 */
var testVar = 'This is a variable form testModule.js';
exports.testVar = testVar;
app.js
/**
 * Created by wanq on 14/11/14.
 */
var testModule = require('./testModule.js');
console.log(testModule.testVar);
2、require.reolve関数を使って完全なモジュール名を調べます.
require.resolve('./testModule.js');//  testModule.js       
3、require cache対象
require.cacheオブジェクトは、既にロードされているモジュールのすべてのキャッシュエリアを表しています.