- 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.
- Big Data Analytics with Hadoop 3
- 軟件架構設計
- Hadoop 2.x Administration Cookbook
- 7天精通Dreamweaver CS5網頁設計與制作
- 機艙監測與主機遙控
- PHP開發手冊
- 西門子S7-200 SMART PLC實例指導學與用
- INSTANT Drools Starter
- 中國戰略性新興產業研究與發展·智能制造裝備
- 網絡服務搭建、配置與管理大全(Linux版)
- 電子設備及系統人機工程設計(第2版)
- Mastering Geospatial Analysis with Python
- 精通LabVIEW程序設計
- C#求職寶典
- 30天學通Java Web項目案例開發