Thursday, 24 September 2020

 

Are 'Arrow Functions' and 'Functions' equivalent / interchangeable?

 

Constructor function

function User(name) {
  this.name = name;
}

// vs

const User = name => {
  this.name = name;
};

 Prototype methods

User.prototype.getName = function() {
  return this.name;
};

// vs

User.prototype.getName = () => this.name;
 

Object (literal) methods

const obj = { getName: function() { // ... } }; // vs const obj = { getName: () => { // ... } };

 

Callbacks
setTimeout(function() { // ... }, 500); // vs setTimeout(() => { // ... }, 500);

 

Variadic functions

function sum() { let args = [].slice.call(arguments); // ... } // vs const sum = (...args) => { // ... }; 
 
 
1. Lexical this and arguments
// Example using a function expression
function createObject() {
  console.log('Inside `createObject`:', this.foo);
  return {
    foo: 42,
    bar: function() {
      console.log('Inside `bar`:', this.foo);
    },
  };
}

createObject.call({foo: 21}).bar(); // override `this` inside createObject
// Example using a arrow function
function createObject() {
  console.log('Inside `createObject`:', this.foo);
  return {
    foo: 42,
    bar: () => console.log('Inside `bar`:', this.foo),
  };
}

createObject.call({foo: 21}).bar(); // override `this` inside createObject

// currently common pattern var that = this; getData(function(data) { that.data = data; }); // better alternative with arrow functions getData(data => { this.data = data; });   

0 comments:

Post a Comment

 

Copyright @ 2013 Appychip.

Designed by Appychip & YouTube Channel