# Global Objects These objects are available in all modules. The following variables may appear to be global but are not. They exist only in the scope of modules, see the [module system documentation][]: * [`__dirname`][] * [`__filename`][] * [`exports`][] * [`module`][] * [`require()`][] The objects listed here are specific to Node.js. There are [built-in objects][] that are part of the JavaScript language itself, which are also globally accessible. ## Class: `AbortController` > Stability: 1 - Experimental A utility class used to signal cancelation in selected `Promise`-based APIs. The API is based on the Web API [`AbortController`][]. To use, launch Node.js using the `--experimental-abortcontroller` flag. ```js const ac = new AbortController(); ac.signal.addEventListener('abort', () => console.log('Aborted!'), { once: true }); ac.abort(); console.log(ac.signal.aborted); // Prints True ``` ### `abortController.abort()` Triggers the abort signal, causing the `abortController.signal` to emit the `'abort'` event. ### `abortController.signal` * Type: {AbortSignal} ### Class: `AbortSignal extends EventTarget` The `AbortSignal` is used to notify observers when the `abortController.abort()` method is called. #### Event: `'abort'` The `'abort'` event is emitted when the `abortController.abort()` method is called. The callback is invoked with a single object argument with a single `type` propety set to `'abort'`: ```js const ac = new AbortController(); // Use either the onabort property... ac.signal.onabort = () => console.log('aborted!'); // Or the EventTarget API... ac.signal.addEventListener('abort', (event) => { console.log(event.type); // Prints 'abort' }, { once: true }); ac.abort(); ``` The `AbortController` with which the `AbortSignal` is associated will only ever trigger the `'abort'` event once. Any event listeners attached to the `AbortSignal` *should* use the `{ once: true }` option (or, if using the `EventEmitter` APIs to attach a listener, use the `once()` method) to ensure that the event listener is removed as soon as the `'abort'` event is handled. Failure to do so may result in memory leaks. #### `abortSignal.aborted` * Type: {boolean} True after the `AbortController` has been aborted. #### `abortSignal.onabort` * Type: {Function} An optional callback function that may be set by user code to be notified when the `abortController.abort()` function has been called. ## Class: `Buffer` * {Function} Used to handle binary data. See the [buffer section][]. ## `__dirname` This variable may appear to be global but is not. See [`__dirname`][]. ## `__filename` This variable may appear to be global but is not. See [`__filename`][]. ## `clearImmediate(immediateObject)` [`clearImmediate`][] is described in the [timers][] section. ## `clearInterval(intervalObject)` [`clearInterval`][] is described in the [timers][] section. ## `clearTimeout(timeoutObject)` [`clearTimeout`][] is described in the [timers][] section. ## `console` * {Object} Used to print to stdout and stderr. See the [`console`][] section. ## `exports` This variable may appear to be global but is not. See [`exports`][]. ## `global` * {Object} The global namespace object. In browsers, the top-level scope is the global scope. This means that within the browser `var something` will define a new global variable. In Node.js this is different. The top-level scope is not the global scope; `var something` inside a Node.js module will be local to that module. ## `module` This variable may appear to be global but is not. See [`module`][]. ## `process` * {Object} The process object. See the [`process` object][] section. ## `queueMicrotask(callback)` * `callback` {Function} Function to be queued. The `queueMicrotask()` method queues a microtask to invoke `callback`. If `callback` throws an exception, the [`process` object][] `'uncaughtException'` event will be emitted. The microtask queue is managed by V8 and may be used in a similar manner to the [`process.nextTick()`][] queue, which is managed by Node.js. The `process.nextTick()` queue is always processed before the microtask queue within each turn of the Node.js event loop. ```js // Here, `queueMicrotask()` is used to ensure the 'load' event is always // emitted asynchronously, and therefore consistently. Using // `process.nextTick()` here would result in the 'load' event always emitting // before any other promise jobs. DataHandler.prototype.load = async function load(key) { const hit = this._cache.get(url); if (hit !== undefined) { queueMicrotask(() => { this.emit('load', hit); }); return; } const data = await fetchData(key); this._cache.set(url, data); this.emit('load', data); }; ``` ## `require()` This variable may appear to be global but is not. See [`require()`][]. ## `setImmediate(callback[, ...args])` [`setImmediate`][] is described in the [timers][] section. ## `setInterval(callback, delay[, ...args])` [`setInterval`][] is described in the [timers][] section. ## `setTimeout(callback, delay[, ...args])` [`setTimeout`][] is described in the [timers][] section. ## `TextDecoder` The WHATWG `TextDecoder` class. See the [`TextDecoder`][] section. ## `TextEncoder` The WHATWG `TextEncoder` class. See the [`TextEncoder`][] section. ## `URL` The WHATWG `URL` class. See the [`URL`][] section. ## `URLSearchParams` The WHATWG `URLSearchParams` class. See the [`URLSearchParams`][] section. ## `WebAssembly` * {Object} The object that acts as the namespace for all W3C [WebAssembly][webassembly-org] related functionality. See the [Mozilla Developer Network][webassembly-mdn] for usage and compatibility. [`AbortController`]: https://developer.mozilla.org/en-US/docs/Web/API/AbortController [`TextDecoder`]: util.html#util_class_util_textdecoder [`TextEncoder`]: util.html#util_class_util_textencoder [`URLSearchParams`]: url.html#url_class_urlsearchparams [`URL`]: url.html#url_class_url [`__dirname`]: modules.html#modules_dirname [`__filename`]: modules.html#modules_filename [`clearImmediate`]: timers.html#timers_clearimmediate_immediate [`clearInterval`]: timers.html#timers_clearinterval_timeout [`clearTimeout`]: timers.html#timers_cleartimeout_timeout [`console`]: console.html [`exports`]: modules.html#modules_exports [`module`]: modules.html#modules_module [`process.nextTick()`]: process.html#process_process_nexttick_callback_args [`process` object]: process.html#process_process [`require()`]: modules.html#modules_require_id [`setImmediate`]: timers.html#timers_setimmediate_callback_args [`setInterval`]: timers.html#timers_setinterval_callback_delay_args [`setTimeout`]: timers.html#timers_settimeout_callback_delay_args [buffer section]: buffer.html [built-in objects]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects [module system documentation]: modules.html [timers]: timers.html [webassembly-mdn]: https://developer.mozilla.org/en-US/docs/WebAssembly [webassembly-org]: https://webassembly.org