# 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` A utility class used to signal cancelation in selected `Promise`-based APIs. The API is based on the Web API [`AbortController`][]. ```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([reason])` * `reason` {any} An optional reason, retrievable on the `AbortSignal`s `reason` property. 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. #### Static method: `AbortSignal.abort([reason])` * `reason`: {any} * Returns: {AbortSignal} Returns a new already aborted `AbortSignal`. #### Static method: `AbortSignal.timeout(delay)` * `delay` {number} The number of milliseconds to wait before triggering the AbortSignal. Returns a new `AbortSignal` which will be aborted in `delay` milliseconds. #### 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` property 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. We recommended that code check that the `abortSignal.aborted` attribute is `false` before adding an `'abort'` event listener. 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. #### `abortSignal.reason` * Type: {any} An optional reason specified when the `AbortSignal` was triggered. ```js const ac = new AbortController(); ac.abort(new Error('boom!')); console.log(ac.signal.reason); // Error('boom!'); ``` ## 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`][]. ## `atob(data)` > Stability: 3 - Legacy. Use `Buffer.from(data, 'base64')` instead. Global alias for [`buffer.atob()`][]. ## `btoa(data)` > Stability: 3 - Legacy. Use `buf.toString('base64')` instead. Global alias for [`buffer.btoa()`][]. ## `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. ## `Event` A browser-compatible implementation of the `Event` class. See [`EventTarget` and `Event` API][] for more details. ## `EventTarget` A browser-compatible implementation of the `EventTarget` class. See [`EventTarget` and `Event` API][] for more details. ## `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. ## `MessageChannel` The `MessageChannel` class. See [`MessageChannel`][] for more details. ## `MessageEvent` The `MessageEvent` class. See [`MessageEvent`][] for more details. ## `MessagePort` The `MessagePort` class. See [`MessagePort`][] for more details. ## `module` This variable may appear to be global but is not. See [`module`][]. ## `performance` The [`perf_hooks.performance`][] object. ## `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(key); if (hit !== undefined) { queueMicrotask(() => { this.emit('load', hit); }); return; } const data = await fetchData(key); this._cache.set(key, 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. ## `structuredClone(value[, options])` The WHATWG [`structuredClone`][] method. ## `DOMException` The WHATWG `DOMException` class. See [`DOMException`][] for more details. ## `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 [`DOMException`]: https://developer.mozilla.org/en-US/docs/Web/API/DOMException [`EventTarget` and `Event` API]: events.md#eventtarget-and-event-api [`MessageChannel`]: worker_threads.md#class-messagechannel [`MessageEvent`]: https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent/MessageEvent [`MessagePort`]: worker_threads.md#class-messageport [`TextDecoder`]: util.md#class-utiltextdecoder [`TextEncoder`]: util.md#class-utiltextencoder [`URLSearchParams`]: url.md#class-urlsearchparams [`URL`]: url.md#class-url [`__dirname`]: modules.md#__dirname [`__filename`]: modules.md#__filename [`buffer.atob()`]: buffer.md#bufferatobdata [`buffer.btoa()`]: buffer.md#bufferbtoadata [`clearImmediate`]: timers.md#clearimmediateimmediate [`clearInterval`]: timers.md#clearintervaltimeout [`clearTimeout`]: timers.md#cleartimeouttimeout [`console`]: console.md [`exports`]: modules.md#exports [`module`]: modules.md#module [`perf_hooks.performance`]: perf_hooks.md#perf_hooksperformance [`process.nextTick()`]: process.md#processnexttickcallback-args [`process` object]: process.md#process [`require()`]: modules.md#requireid [`setImmediate`]: timers.md#setimmediatecallback-args [`setInterval`]: timers.md#setintervalcallback-delay-args [`setTimeout`]: timers.md#settimeoutcallback-delay-args [`structuredClone`]: https://developer.mozilla.org/en-US/docs/Web/API/structuredClone [buffer section]: buffer.md [built-in objects]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects [module system documentation]: modules.md [timers]: timers.md [webassembly-mdn]: https://developer.mozilla.org/en-US/docs/WebAssembly [webassembly-org]: https://webassembly.org