# ECMAScript 2015 (ES6) with Node.js
# const/let declarations
Unlike var
, const
/let
are bound to lexical scope rather than function scope.
{
var x = 1 // will escape the scope
let y = 2 // bound to lexical scope
const z = 3 // bound to lexical scope, constant
}
console.log(x) // 1
console.log(y) // ReferenceError: y is not defined
console.log(z) // ReferenceError: z is not defined
Run in RunKit (opens new window)
# Arrow functions
Arrow functions automatically bind to the 'this' lexical scope of the surrounding code.
performSomething(result => {
this.someVariable = result
})
vs
performSomething(function(result) {
this.someVariable = result
}.bind(this))
# Arrow Function Example
Let's consider this example, that outputs the squares of the numbers 3, 5, and 7:
let nums = [3, 5, 7]
let squares = nums.map(function (n) {
return n * n
})
console.log(squares)
Run in RunKit (opens new window)
The function passed to .map
can also be written as arrow function by removing the function
keyword and instead adding the arrow =>
:
let nums = [3, 5, 7]
let squares = nums.map((n) => {
return n * n
})
console.log(squares)
Run in RunKit (opens new window)
However, this can be written even more concise. If the function body consists of only one statement and that statement computes the return value, the curly braces of wrapping the function body can be removed, as well as the return
keyword.
let nums = [3, 5, 7]
let squares = nums.map(n => n * n)
console.log(squares)
Run in RunKit (opens new window)
# destructuring
let [x,y, ...nums] = [0, 1, 2, 3, 4, 5, 6];
console.log(x, y, nums);
let {a, b, ...props} = {a:1, b:2, c:3, d:{e:4}}
console.log(a, b, props);
let dog = {name: 'fido', age: 3};
let {name:n, age} = dog;
console.log(n, age);
# flow
/* @flow */
function product(a: number, b: number){
return a * b;
}
const b = 3;
let c = [1,2,3,,{}];
let d = 3;
import request from 'request';
request('http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=AAPL', (err, res, payload)=>{
payload = JSON.parse(payload);
let {LastPrice} = payload;
console.log(LastPrice);
});
# ES6 Class
class Mammel {
constructor(legs){
this.legs = legs;
}
eat(){
console.log('eating...');
}
static count(){
console.log('static count...');
}
}
class Dog extends Mammel{
constructor(name, legs){
super(legs);
this.name = name;
}
sleep(){
super.eat();
console.log('sleeping');
}
}
let d = new Dog('fido', 4);
d.sleep();
d.eat();
console.log('d', d);