This article brings you a detailed introduction to JavaScript high-order functions (with code). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you. helped.
Use functions as data and unlock some powerful patterns.
A function that accepts and/or returns another function is called a higher-order function.
The reason why it is high-level is that it is not a string, number or Boolean value, but operates the function from a higher level. Beautiful meta.
Using functions in JavaScript, you can
Just like all other data . This is the key.
sayHi = (name) => `Hi, ${name}!`; result = sayHi('User'); console.log(result); // 'Hi, User!'
double = (x) => x * 2; result = double(4); console.log(result); // 8
getClearance = (allowed) => allowed ? 'Access granted' : 'Access denied'; result1 = getClearance(true); result2 = getClearance(false); console.log(result1); // 'Access granted' console.log(result2); // 'Access denied'
getFirstName = (obj) => obj.firstName; result = getFirstName({ firstName: 'Yazeed' }); console.log(result); // 'Yazeed'
len = (array) => array.length; result = len([1, 2, 3]); console.log(result); // 3
These 5 types are first-class citizens in all major languages.
What makes them first-class citizens? You can pass them around, store them in variables and arrays, and use them as input to calculations. You can use them like any data.
#4 ways to use functions as data in JavaScript:
isEven = (num) => num % 2 === 0; result = [1, 2, 3, 4].filter(isEven); console.log(result); // [2, 4]
See how filter
uses isEven
to decide which numbers to keep? isEven
is a function that is a parameter of another function .
It is called by the filter
for each number, and uses the return value true
or false
to determine whether the number should be kept or discarded.
add = (x) => (y) => x + y;
add
requires two parameters, but not all at once. This is a function that takes only x
, and it returns a function that takes only y
. Because JavaScript allows functions to be return values - just like strings, numbers, and booleans.
If you wish, you can still provide x
and y
immediately and make a double call
result = add(10)(20); console.log(result); // 30
or x
first and theny
:
add10 = add(10); result = add10(20); console.log(result); // 30
Let’s go back to the last example. add10 is the result of calling add with one argument. and output it to the console.
add10 is a function that accepts a y and returns x y. After you provide y, it will immediately calculate and return the final result you want.
Perhaps the biggest benefit of higher-order functions is higher reusability. Without it, the main JavaScript array methods - map
, filter
and reduce
would not exist!
This is a user list. We're going to do some calculations on their information.
users = [{ name: 'Yazeed', age: 25 }, { name: 'Sam', age: 30 }, { name: 'Bill', age: 20 }];
If there is no higher-order function, we need to use a loop to imitate the function of map
.
getName = (user) => user.name; usernames = []; for (let i = 0; i <p>Or we can do this! </p><pre class="brush:php;toolbar:false">usernames = users.map(getName); console.log(usernames); // ["Yazeed", "Sam", "Bill"]
In a world without higher-order functions, we still need loops to reimplement the functionality of filter
.
startsWithB = (string) => string .toLowerCase() .startsWith('b'); namesStartingWithB = []; for (let i = 0; i <p>Or we can do this! </p><pre class="brush:php;toolbar:false">namesStartingWithB = users .filter((user) => startsWithB(user.name)); console.log(namesStartingWithB); // [{ "name": "Bill", "age": 20 }]
Yes, reduce... without higher-order functions, you can’t achieve so many cool things!!
The above is the detailed content of Detailed introduction to JavaScript high-order functions (with code). For more information, please follow other related articles on the PHP Chinese website!