Problem Statement
What does it mean that JavaScript has first-class functions?
Explanation
First-class functions mean functions are treated as first-class citizens, just like any other value.
You can assign functions to variables. Pass functions as arguments to other functions. Return functions from functions. Store functions in data structures.
This enables higher-order functions, callbacks, closures, and functional programming patterns.
First-class functions are fundamental to JavaScript's flexibility.
Many JavaScript patterns depend on this feature.
Understanding this concept is essential for advanced JavaScript.
Code Solution
SolutionRead Only
// 1. Assign function to variable
const greet = function(name) {
return 'Hello ' + name;
};
console.log(greet('John')); // 'Hello John'
// 2. Pass function as argument
function executeFunction(fn, value) {
return fn(value);
}
const result = executeFunction(greet, 'Alice');
console.log(result); // 'Hello Alice'
// 3. Return function from function
function createMultiplier(multiplier) {
return function(number) {
return number * multiplier;
};
}
const double = createMultiplier(2);
const triple = createMultiplier(3);
console.log(double(5)); // 10
console.log(triple(5)); // 15
// 4. Store functions in array
const operations = [
function(a, b) { return a + b; },
function(a, b) { return a - b; },
function(a, b) { return a * b; }
];
console.log(operations[0](5, 3)); // 8
console.log(operations[1](5, 3)); // 2
console.log(operations[2](5, 3)); // 15
// 5. Store functions in object
const calculator = {
add: function(a, b) { return a + b; },
subtract: function(a, b) { return a - b; },
multiply: function(a, b) { return a * b; }
};
console.log(calculator.add(10, 5)); // 15
// Array methods use first-class functions
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(function(n) {
return n * 2;
});
console.log(doubled); // [2, 4, 6, 8, 10]
// Callback pattern
function fetchData(callback) {
setTimeout(function() {
callback('Data loaded');
}, 1000);
}
fetchData(function(data) {
console.log(data); // 'Data loaded'
});