JS TutorialLesson #136

ECMAScript 2027

- Temporal API The long-time-overdue successor to the buggy, 30-year-old Date object. Unlike Date, Temporal objects are immutable and provide first-class support for time zones ...

Anticipated Features to ES2027

  • Temporal API The long-time-overdue successor to the buggy, 30-year-old Date object. Unlike Date, Temporal objects are immutable and provide first-class support for time zones and non-Gregorian calendars.
  • Explicit Resource Management (using keyword) C#-style block-scoped disposal variables that auto-clean up database connections and streams when leaving context, avoiding try...finally boilerplate.

Resource Management with using

JavaScript 2026 added two keywords to automatically manage and dispose resources (like file handles or database connections) when they go out of scope, reducing the need for explicit try...finally blocks.

  • using provides synchronous cleanup of block-scoped variables.
  • await using provides asynchronous cleanup for resources like network streams.

Explicit Resource Management

The using Keyword

The using keyword is an addition to JavaScript 2026. It provides a mechanism for managing resources that require explicit disposal.

It declares a block-scoped variable, similar to const, but with the difference that it guarantees synchronous disposal of the used resource when the variable goes out of scope.

Example

Example Code

javascript
Try it Yourself
class MyResource {

  constructor(name) {

    this.name = name;

    myDisplay(`Resource ${this.name} acquired.`);

  }

  [Symbol.dispose]() {

    myDisplay(`Resource ${this.name} disposed.`);

  }

}

function manageResource() {

  using resource = new MyResource("Database Connection");

  // Use the resource here

  myDisplay(`Using resource: ${resource.name}`);

}

The using keyword simplifies resource management by automatically handling the cleanup process, reducing the risk of resource leaks and improving code readability compared to manual try...finally blocks for disposal.

  • Resource Management using is designed for objects that implement the Symbol.dispose method, which defines the cleanup logic for the resource.
  • Synchronous Disposal When a variable declared with using exits its scope (at the end of a block or function), its Symbol.dispose method is automatically called.
  • Asynchronous Disposal For resources requiring asynchronous cleanup, the await using declaration can be employed. This ensures that the disposal process is awaited before the variable fully goes out of scope.
  • Block-Scoped Like const, variables declared with using are local to the block in which they are declared, and must be initialized at the time of declaration.
  • Immutable Like to const, variables declared with using cannot be reassigned after initialization.

Browser Support

using is already supported in many browsers:

Chrome 134Edge 134Firefox 141Safari ❌Opera 119
Mar 2025Mar 2025Jul 2025❌May 2025

Explicit Resource Management

await using

Inspired by other languages, JavaScript 2026 introduces using blocks for automatic cleanup of resources like file handles, database connections, or network streams.

This is especially beneficial for asynchronous operations:

Example

Example Code

javascript
Try it Yourself
async function processFile() {

  using fileHandle = await openFile('data.txt');

// Work with fileHandle here

} // fileHandle is automatically closed here

Browser Support

await using is already supported in many browsers:

Chrome 134Edge 134Firefox 141Safari ❌Opera 119
Mar 2025Mar 2025Jul 2025❌May 2025

Interactive Code Examples

JS Example 1

javascript
Try it Yourself
JavaScript syntax and algorithm demonstration.
class MyResource {

  constructor(name) {

    this.name = name;

    myDisplay(`Resource ${this.name} acquired.`);

  }

  [Symbol.dispose]() {

    myDisplay(`Resource ${this.name} disposed.`);

  }

}



function manageResource() {

  using resource = new MyResource("Database Connection");



  // Use the resource here

  myDisplay(`Using resource: ${resource.name}`);

}

JS Example 2

javascript
Try it Yourself
JavaScript syntax and algorithm demonstration.
async function processFile() {

  using fileHandle = await openFile('data.txt');



// Work with fileHandle here



} // fileHandle is automatically closed here