1. What are modules in JavaScript?
Modules are reusable pieces of code that encapsulate related functionality. They help in organizing code, managing dependencies, and promoting reusability.
2. What are closures and how are they implemented in JavaScript?
Closures are functions that have access to the outer function's variables even after the outer function has finished executing. They are implemented by creating a scope chain that remains intact even after the outer function exits.
3. Explain the concept of currying in JavaScript.
Currying is the technique of converting a function that takes multiple arguments into a sequence of functions that each take a single argument.
4. What are generators in JavaScript?
Generators are functions that can be paused and resumed, allowing for more flexible control flow.
5. What are arrow functions in JavaScript?
Arrow functions are a concise way to write anonymous functions in JavaScript, introduced in ES6.
6. Explain the difference between `null` and `undefined` in JavaScript.
`null` is an explicitly assigned value that represents the absence of any object value, while `undefined` indicates a variable that has been declared but has not yet been assigned a value.
7. What is memoization and how is it useful in JavaScript?
Memoization is an optimization technique used to speed up function execution by caching the results of expensive function calls and returning the cached result when the same inputs occur again.
8. What are the different ways to create objects in JavaScript?
Objects in JavaScript can be created using object literals, constructor functions, the `Object.create()` method, and class syntax (introduced in ES6).
9. What is event bubbling and event capturing in JavaScript?
Event bubbling is a mechanism where an event occurring in a child element is propagated up to its parent elements, while event capturing is the reverse process where the event is captured from the top of the DOM hierarchy down to the target element.
10. Explain the concept of `bind, call`, and `apply` methods in JavaScript.
`bind`, `call`, and `apply` are methods used to manipulate the this keyword in JavaScript functions. `bind` creates a new function with a specified this value, call calls a function with a specified `this` value and arguments passed individually, and `apply` calls a function with a specified `this` value and arguments passed as an array.
11. Explain the concept of function currying with an example.
Function currying is the process of transforming a function that takes multiple arguments into a
series of functions that each take a single argument. For example:
function multiply(a) {
return function(b) {
return a * b;
};
}
const multiplyByTwo = multiply(2);
console.log(multiplyByTwo(3)); // Output: 6
12. What are closures and how can they lead to memory leaks in JavaScript?
Closures are functions that have access to their outer function's scope even after
the outer function has finished executing. They can lead to memory leaks if they
hold references to large objects or variables that are no longer needed,
preventing them from being garbage collected.
13. Explain the concept of prototypal inheritance and how it differs from classical inheritance.
Prototypal inheritance is a mechanism in JavaScript where objects inherit
properties and methods from other objects through prototype chains. It differs
from classical inheritance, which involves the creation of classes and instances,
by being more flexible and dynamic.
14. What are the differences between `==` and `===` in JavaScript? Provide examples.
`==` performs type coercion before comparison, while` ===` does not. For example:
console.log(1 == '1'); // Output: true (coerces string to number)
console.log(1 === '1'); // Output: false (strict comparison)
15. Explain the difference between the for...in
and for...of
loops in JavaScript.
The for...in
loop iterates over the enumerable properties of an object, while the for...of
loop iterates over iterable objects such as arrays, strings, maps, and sets, returning their property values.