- Hands-On Machine Learning with JavaScript
- Burak Kanber
- 424字
- 2021-06-25 21:38:19
Arrow functions
One quirky, useful, but somewhat annoying aspect of ES5 JavaScript is its heavy use of callbacks that run asynchronously. You are probably intimately familiar with jQuery code that looks something like this:
$(“#link”).click(function() {
var $self = $(this);
doSomethingAsync(1000, function(resp) {
$self.addClass(“wasFaded”);
var processedItems = resp.map(function(item) {
return processItem(item);
});
return shipItems(processedItems);
});
});
We're forced to create a variable called $self because the original this context is lost in our inner anonymous function. We also have a lot of boilerplate and difficult-to-read code due to needing to create three separate anonymous functions.
Arrow function syntax is both syntactic sugar that helps us write anonymous functions with a shorter syntax, and also a functional update that preserves the context of this inside an arrow function.
For instance, the preceding code may be written in ES6 as follows:
$(“#link”).click(function() {
dozsSomethingAsync(1000, resp => {
$(this).addClass(“wasFaded”);
const processedItems = resp.map(item => processItem(Item));
return shipItems(processedItems);
});
});
You can see in the preceding code that we no longer need a $self variable to preserve this, and our call to .map is much simpler, no longer requiring the function keyword, parentheses, curly braces, or a return statement.
Now let's look at some equivalent functions. Let's look at the following code:
const double = function(number) {
return number * 2;
}
The preceding code would be similar to:
const double = number => number * 2;
// Is equal to:
const double = (number) => { return number * 2; }
In the aforementioned examples, we can omit the parentheses around the number parameter because the function only requires one parameter. If the function required two parameters, we would be required to add parentheses as in the next example. Additionally, if the body of our function only requires one line, we can omit the function body curly braces and omit the return statement.
Let's look at another equivalence, with multiple parameters, as shown in the following code:
const sorted = names.sort(function (a, b) {
return a.localeCompare(b);
});
The preceding code would be similar to:
const sorted = names.sort((a, b) => a.localeCompare(b));
I find that arrow functions make themselves most useful in situations like the preceding one, when you're doing data transformations, especially where using Array.map, Array.filter, Array.reduce, and Array.sort calls with straightforward function bodies. Arrow functions are less useful in jQuery because of jQuery's tendency to give you data using the this context, which you don't receive with anonymous arrow functions.
- 課課通計算機原理
- 三菱FX3U/5U PLC從入門到精通
- Natural Language Processing Fundamentals
- 腦動力:PHP函數(shù)速查效率手冊
- Data Wrangling with Python
- 計算機網(wǎng)絡(luò)技術(shù)實訓(xùn)
- Creo Parametric 1.0中文版從入門到精通
- OpenStack Cloud Computing Cookbook(Second Edition)
- 步步圖解自動化綜合技能
- 愛犯錯的智能體
- Serverless Design Patterns and Best Practices
- 計算機硬件技術(shù)基礎(chǔ)學(xué)習(xí)指導(dǎo)與練習(xí)
- PostgreSQL High Performance Cookbook
- Mastercam X5應(yīng)用技能基本功特訓(xùn)
- 電機與電力拖動