Content & privacy
Languages · INTERVIEW GUIDE

JavaScript & TypeScript

Scope, closures, async behavior, object identity, and the type system.

Practice this topic
Filters
27 questions

What is an execution context and call stack?

JavaScript & TypeScript·Scope & execution

An execution context is the information JavaScript uses while running a piece of code, including its variables, scope and this value. The call stack tracks which function is currently running and where execution should return. Each function call adds a context, and returning removes it.

Foundation2 min read

What is scope? What does lexical mean?

JavaScript & TypeScript·Scope & execution

Scope is the part of a program where a variable can be accessed. JavaScript uses lexical scope, which means the available outer variables depend on where a function was defined, not where it is later called. The engine searches outward through surrounding scopes when a name is not found locally.

Foundation2 min read

What is the difference between var, let and const?

JavaScript & TypeScript·Scope & execution

var, let and const declare variables, but they have different scope and initialization rules. let and const are block-scoped, making it easier to keep a variable inside the code that needs it. const prevents reassignment of the binding; it does not make an object immutable.

Foundation2 min read

What are hoisting and the TDZ (Temporal Dead Zone)?

JavaScript & TypeScript·Scope & execution

Hoisting is JavaScript's behavior of processing declarations before executing the code in a scope. Because of this, a function declaration can usually be called before its line appears, while variables behave differently depending on how they are declared.

Foundation2 min read

Are objects passed by reference?

JavaScript & TypeScript·Scope & execution

JavaScript passes every argument by value. For an object, the copied value is a reference to that object, so the caller and function can still reach the same underlying object. This explains why changing a property affects the caller, but assigning a new object to the parameter does not.

Foundation2 min read

What is the difference between == and ===?

JavaScript & TypeScript·Scope & execution

== is loose equality: it may convert values to compatible types before comparing them. === is strict equality: it compares without that conversion. Strict equality usually makes application checks easier to understand because strings, numbers and booleans are not silently treated as the same value.

Foundation2 min read

What are null, undefined and NaN?

JavaScript & TypeScript·Scope & execution

undefined usually means a value has not been supplied, while null is commonly used to mark an intentionally empty value. NaN means a numeric calculation or conversion did not produce a valid number. These are different cases, so an API should not treat them as interchangeable without a clear rule.

Foundation2 min read

What is a closure?

JavaScript & TypeScript·Functions & objects

A closure is a function together with access to the variables in the scope where it was created. That access remains available even after the outer function has finished running. Closures are useful for private state, callbacks and functions configured with some remembered value.

Foundation2 min read

How does this work? How are arrow functions different?

JavaScript & TypeScript·Functions & objects

this is the receiver used when a regular function runs, and its value usually depends on how the function is called. Arrow functions do not create their own this; they use the surrounding one. This matters when a method is passed as a callback and loses its original receiver.

Intermediate2 min read

How do prototypes and classes work?

JavaScript & TypeScript·Functions & objects

A prototype is an object from which another object can inherit properties and methods. When a property is missing on an object, JavaScript follows its prototype chain until it finds the property or reaches null. Classes provide structured syntax for constructing objects and sharing methods through that mechanism.

Intermediate2 min read

How does async JavaScript run?

JavaScript & TypeScript·Async JavaScript

Asynchronous JavaScript lets a program start work that may finish later without waiting synchronously for the result. A promise represents eventual completion, and async/await provides a readable way to work with promises. The runtime queues continuations and runs them when the current synchronous work has finished and the relevant checkpoints are reached.

Intermediate2 min read

Which Promise method should I use?

JavaScript & TypeScript·Async JavaScript

Promise combinators combine several promises into one result. The correct method depends on whether you need every success, every outcome, the first outcome or the first success. They observe promises; they do not automatically cancel ongoing operations when the combined result settles.

Intermediate2 min read

Why does forEach with async cause problems?

JavaScript & TypeScript·Async JavaScript

forEach calls a callback for each array item but ignores the values returned by those callbacks. An async callback returns a promise, so forEach does not wait for its completion or collect its rejection. Choose a loop or a promise combinator based on whether the operations depend on each other.

Intermediate2 min read

What causes a race condition?

JavaScript & TypeScript·Async JavaScript

A race condition happens when the result depends on the timing of operations that access shared state. JavaScript can have races even on one execution thread because asynchronous work pauses and lets other requests run between a read and a write. Databases and other processes can also update the same data concurrently.

Intermediate2 min read

Is spread a deep copy?

JavaScript & TypeScript·Functions & objects

Spread syntax creates a new outer object or array by copying its enumerable contents. It is a shallow copy, so nested objects are still shared references. This matters when updating React state or copying request data that another part of the application may modify.

Intermediate2 min read

Debounce vs throttle: what is the difference?

JavaScript & TypeScript·Functions & objects

Debouncing and throttling control how frequently a function runs when events arrive repeatedly. Debouncing waits for a quiet period, while throttling limits execution frequency during continued activity. They reduce unnecessary work but introduce different delays and must match the user experience.

Intermediate2 min read

CommonJS vs ES Modules: what is the difference?

JavaScript & TypeScript·Runtime & modules

CommonJS and ES Modules are two systems for dividing JavaScript code into reusable modules. CommonJS uses runtime require calls, while ES Modules provide standard import and export declarations with a statically described dependency structure. Their loading and interoperability rules depend on the runtime and file configuration.

Intermediate2 min read

What are streams, buffers and EventEmitter?

JavaScript & TypeScript·Runtime & modules

A buffer is a container for raw bytes, while a stream processes a sequence of data in chunks. EventEmitter is a mechanism for registering listeners and notifying them when an event occurs. These tools work together in Node networking and file handling, where data can arrive gradually.

Intermediate2 min read

Difficulty is an editorial estimate. Completion means you chose to mark a question as understood.