JavaScript is still the heart of modern web apps in 2025. Here are top 30 JavaScript interview questions that cover everything from the basics to advanced topics such as async/await, modules, and the event loop. These questions reflect what interviewers ask today, with a strong focus on real-world, practical skills.
This JavaScript interview guide has three sections: 10 basic, 10 intermediate, and 10 advanced questions. Each answer is explained in simple terms, with code examples and tips on why it matters. Practice these to code better, debug faster, and land roles on frontend or full-stack teams.
JavaScript Interview Questions Set #1: Basics
Start with fundamentals. These build a strong base for any JS role.
Q1: What is a JavaScript object? List ways to create one.
A JavaScript object holds data as key-value pairs, like a real-world item with properties. It’s key for storing user info or app states.
Ways to create:
- Object literal: Quick and common.
const person = { name: "Alex", age: 28 };
- Object constructor: For empty starts.
const car = new Object(); car.make = "Honda";
- Object.create(): Sets a prototype.
const animal = Object.create({ type: "Pet" });
- Class (ES6): For blueprints.
class Book { constructor(title) { this.title = title; } } const novel = new Book("JS Guide");
Why it matters: Objects are everywhere in JS. In interviews, show how they enable reusable code. On the job, use them for API data.
Q2: Explain variable scope in JavaScript.
Scope means where a variable lives and can be used. JS has global and local scopes. Global vars work anywhere; local ones only in their block or function.
Example:
// Global
let globalVar = "Hello";
function myFunc() {
// Local
let localVar = "World";
console.log(globalVar); // "Hello"
console.log(localVar); // "World"
}
myFunc();
console.log(globalVar); // "Hello"
// console.log(localVar); // Error: not defined
Why it matters: Wrong scope causes bugs. In 2025 jobs, it helps avoid memory leaks in big apps. Tip: Use local scope for clean code.
Q3: What does the ‘this’ keyword mean?
‘this’ points to the current object or context. It changes based on how you call the function.
Example:
const user = {
name: "Sam",
sayHi: function() { console.log("Hi, " + this.name); }
};
user.sayHi(); // "Hi, Sam"
In arrows, ‘this’ stays from outer scope—great for callbacks.
Why it matters: Misusing ‘this’ breaks event handlers. Interviewers test this for OOP skills; jobs use it in frameworks like React.
Q4: What is the prototype property?
Prototype lets objects share methods and properties, saving memory. Every function has a prototype object.
Example:
function Dog(name) { this.name = name; }
Dog.prototype.bark = function() { console.log(this.name + " says woof!"); };
const pup = new Dog("Buddy");
pup.bark(); // "Buddy says woof!"
Why it matters: It’s JS’s inheritance way. In 2025, understand it for performance in large apps. Avoid deep copies.
Q5: Describe closures and their use.
A closure is an inner function that remembers outer variables even after the outer ends. It keeps private data safe.
Example:
function makeCounter() {
let count = 0;
return function() { return ++count; };
}
const counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2
Why it matters: Closures enable modules and state in React hooks. Jobs use them for counters or auth. Trendy for functional JS.
Q6: When to use ‘self’ instead of ‘this’?
Use ‘self’ (alias for ‘this’) in callbacks where ‘this’ changes, like setTimeout.
Example:
const obj = {
name: "Lee",
delayHi: function() {
const self = this;
setTimeout(() => { console.log("Hi, " + self.name); }, 1000);
}
};
obj.delayHi(); // "Hi, Lee" after 1s
Why it matters: Fixes context loss. Common in async code—key for 2025 interviews on timers.
Q7: What is an anonymous function and its benefits?
An anonymous function has no name. It’s great for one-time use, like in map or events.
Example:
const nums = [1, 2, 3];
const doubles = nums.map(function(num) { return num * 2; });
console.log(doubles); // [2, 4, 6]
Use arrows for shorter: nums.map(n => n * 2)
.
Why it matters: Saves space in callbacks. Jobs: Use in array methods for clean data processing.
Q8: Difference between == and ===?
The operator == compares values after converting types (loose). === checks value and type (strict).
Example:
"5" == 5; // true (converts string to number)
"5" === 5; // false (types differ)
Why it matters: == can surprise with bugs. Always use === in modern JS—interview staple for safe code.
Q9: List JavaScript data types.
Type | Purpose | Example |
---|---|---|
Number | Numbers | 42 |
String | Text | “Hello” |
Boolean | True/false | true |
Object | Key-value data | {key: “val”} |
Array | Lists | [1, 2] |
Function | Code blocks | () => {} |
Undefined | Unset vars | undefined |
Null | No value | null |
Symbol | Unique keys | Symbol() |
BigInt | Big numbers | 1n |
Why it matters: Knowing types avoids errors. In 2025, BigInt helps with crypto apps.
Q10: Explain prototypal inheritance. Objects inherit from prototypes, not classes. New objects link to a prototype for shared traits.
Example:
function Vehicle(type) { this.type = type; }
Vehicle.prototype.move = function() { return this.type + " moves"; };
const bike = new Vehicle("Bike");
console.log(bike.move()); // "Bike moves"
Why it matters: JS’s core inheritance. Useful for custom objects in games or UIs.
JavaScript Interview Questions Set #2: Intermediate
These test real-world skills like arrays and async basics—hot in 2025 frontend roles.
Q11: What is asynchronous JS and why key?
Async lets code run tasks in background without blocking, like fetching data. JS is single-threaded, so async keeps apps smooth.
Use Promises or async/await. Example:
async function getData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
Why it matters: Powers APIs in React/Vue. Interviews probe for non-blocking code; jobs: Faster user experience.
Q12: Why is JS loosely typed?
JS doesn’t force variable types—you can mix them, and it auto-converts. Flexible but error-prone.
Example:
let num = 10;
num = "Ten";
console.log(num + 1); // "Ten1"
Why it matters: Quick prototyping, but use typeof checks. In 2025, pair with TypeScript for big teams.
Q13: Ways to create arrays.
- Literal: let arr = [1, 2, 3]; (easy).
- Constructor: let arr = new Array(3); (sets length).
Prefer literal for readability.
Why it matters: Arrays store lists. Jobs: Use for user lists or configs.
Q14: Explain cookies and JS use.
Cookies are small data bits stored in browser for sessions or prefs. JS sets/gets via document.cookie.
Set: document.cookie = “user=Alex; expires=…; path=/”; Get: Parse the string.
But use localStorage for bigger data—simpler.
Why it matters: Tracks logins. In 2025, consider privacy laws like GDPR.
Q15: Which method adds to array end?
push() adds items and returns new length.
Example:
let fruits = ["apple", "banana"];
fruits.push("cherry");
console.log(fruits.length); // 3
Why it matters: Builds dynamic lists. Common in shopping carts.
Q16: Naming rules for JS variables?
Use camelCase: start lowercase, capitalize words. Descriptive, no spaces. Start with letter/_/$. Avoid keywords like ‘if’.
Examples: userName, isActive.
Why it matters: Readable code for teams. Tools like ESLint enforce in 2025.
Q17: How to set a cookie?
Use document.cookie with name=value, expires, path.
Example: document.cookie = “theme=dark; expires=…; path=/”;
Why it matters: Remembers settings. But fetch() often replaces old AJAX.
Q18: How to read a cookie?
document.cookie gives all as string; split to find one.
Example:
let cookies = document.cookie.split(';');
let theme = cookies.find(c => c.startsWith('theme='))?.split('=')[1];
Why it matters: Retrieves saved data. Use JSON.parse for complex.
Q19: How to delete a cookie?
Set expires to past date.
Example: document.cookie = “theme=; expires=Thu, 01 Jan 1970…; path=/”;
Why it matters: Clears sessions. Important for logout.
Q20: How to submit a form in JS?
Use form.submit().
Example: document.getElementById(‘myForm’).submit();
Or add event listener for validation first.
Why it matters: Handles user input. In 2025, use with async for no-page-reload submits.
JavaScript Interview Questions Set #3: Advanced
Dive into trends like event loop and modules—must for senior roles in 2025.
Q21: Why avoid global variables?
Globals pollute namespace, cause conflicts in big code. Use locals or modules.
Example: Wrap in function for scope.
Why it matters: Scales apps. Interviews test for clean architecture.
Q22: Main JS objects?
- Window: Global context.
- Built-ins: Array, String, Date.
- DOM: Page elements.
- Events: User actions.
- Functions: Callable objects.
Why it matters: Interact with browser. Key for web apps.
Q23: Why defer JS loading?
Defer runs script after HTML parses, speeding page load. <script defer src="app.js"></script>
Why it matters: Better UX. Google ranks fast sites higher in 2025.
Q24: What is strict mode and benefits?
“use strict”; catches errors early, bans bad habits like silent globals.
Example: At top of script.
Why it matters: Safer code. Default in modules; essential for prod.
Q25: What are event handlers?
Attach to elements for actions like clicks.
Example:
document.getElementById('btn').addEventListener(
'click', () => alert('Clicked!')
);
Why it matters: Builds interactive UIs. Use delegation for performance.
Q26: What if a function returns nothing?
It returns undefined by default.
Example:
function greet() { console.log('Hi'); }
console.log(greet()); // undefined
Why it matters: Avoid surprises in chains. Always return explicitly.
Q27: What does encodeURI() do?
Encodes special chars in URLs to % codes, like space to %20.
Example: encodeURI("hello world") → "hello%20world"
Why it matters: Safe API calls. Use decodeURI to reverse.
Q28: Array() vs [] difference?
Both make arrays, but [] is shorter and safer. Array(3) makes empty slots if no args.
Why it matters: [] for most cases. Avoid Array() pitfalls.
Q29: Explain hoisting.
Declarations move to top before run. Vars hoist but not inits; functions fully.
Example:
console.log(x); // undefined
var x = 5;
// Becomes: var x; console.log(x); x=5;
Let/const hoist but block-error if used early.
Why it matters: Explains weird behaviors. Use let/const to avoid.
Q30: How to replace all string matches?
Use replace() with /g flag regex.
Example:
let text = "test test";
text = text.replace(/test/g, "good");
console.log(text); // "good good"
For dynamic: new RegExp.
Why it matters: Cleans data. In jobs, use for search/replace in UIs.
More Resources for JavaScript Interview Preparation
Great! You’ve mastered these top 30 JavaScript interview questions. To keep sharpening your skills for interviews and daily coding, check out these handpicked resources from TechBeamers:
- 20 Proven JavaScript Tips and Coding Practices: Learn essential best practices to write cleaner, faster JS code and avoid common pitfalls in real-world projects.
- JavaScript Quiz for Web Developers: Test your JS knowledge with interactive quizzes—perfect for quick interview prep and self-assessment.
- Top 10 JavaScript IDEs for Web Development: Discover the best tools and IDEs to boost your productivity as a JS developer, from VS Code to WebStorm.
- 6 Web Application Testing Techniques Every Tester Should Know: Dive into practical testing methods for JS-powered web apps, ensuring your code is robust and bug-free.
- Cracking the Coding Interview: How a Young Girl Succeeded: Get inspired by real strategies, tips, and a step-by-step guide to acing coding interviews at top tech companies.
We suggest you bookmark this list of JavaScript interview questions and answers to refresh anytime. For extra practice, explore sites like LeetCode, freeCodeCamp, or MDN Web Docs. Dive into ES2025 features like improved iterators for cutting-edge JS.
Lastly, our site needs your support to stay free—share this post on social media (Linkedin/Twitter) if it helped boost your prep!
Happy coding, TechBeamers Team