Arrow Function.md

Arrow Functions

The basic syntax of an arrow function is as follows

var fn = data => data;

The code means :

var fn = function( data ) {
return data;
}
let getNumber = () => 42;

console.log(typeof getNumber);
console.log(getNumber());
var getPrice = (quantity,tax) => (quantity * 5) + (1 + tax);
console.log(getPrice(2,.095));
var getPrice = (quantity,tax) => {
let price = (quantity * 5)
price *= (1 + tax);
return price;
}
console.log(getPrice(2,.095));
var getNumber = data => ({data: 'check', number: 42});
var getNumber = function(data) {
return {
data:'check',
number: 42
}
}

How create IIFEs using arrow function?

var fn = function( number) {
return {
getNumber: function(){
return number;
}
}
}(42); console.log(fn.getNumber);

Why we use IIFEs?

This is an effective pattern to shield the expression from the rest of program.

var fn = ((number) => {
return {
getNumber: function() {
return number;
}
}
})(42);
console.log(fn.getNumber());

Difference of function expressions and function declarations

Arrow function do save us a few lines of code and characters ,but the real purpose of the arrow funcion is to handlethe this keyword within functions. this behaves differently inside an arrow function.

Let's take a look at how the this keyword work in general

A tale about this

1.Function Invocation

function getContext(){
console.log(this);
}

getContext() is a Window/Global object.At the time getContext() is called,JavaScript automatically sets this at the global object,which in browser is Window.

if(this === window){
console.log('This refers to the global context')
}

2.Method Invocation

let myObj = {
name: 'fancy',
opration: function(){
console.log(this)
}
}
myObj.opration();
let x = myObj.opration;
x();
let x =  myObj.opration;
x();
x.call(myObj);
//myObj.x()?

3.Construtor Invocation

what is constructor invocation?

Constructor invocation happens when an object is created using the new keyword.

function Employee( name, department, salary){
this.name = name;
this.department = department;
this.salary = salary; console.log('Welcome'+this.name+"!");
} let john = new Employee('Johe', 'Sales', 4000 );

this in arrow funcion

Arrow function are designed to lexically bind the

context ,which means that this refers to the enclosing

context where the arrow funcion is defined.Unlike a

normal function, arrow function does not create its

own excution context,but takes this from outer function

where it is defined.

function Employee(firstName, department, salary){
this.firstName = firstName;
this.department = department;
this.salary = salary; this.getInfo = function(){
return function(){
console.log(this.firstName + " from " +
this.department + " earns " + this.salary
);
}
}
} let jim = new Employee('Jim', 'Finance', '5200');
let printInfo = jim.getInfo();
printInfo();

In this section, Employee is a construtor function and

we created a new employee object called jim using the

constructor function with the new keyword.In order to

print the employee information,we need using the function

returned by jim.getInfo().

Here,printInfo refers to the inner function and since

we are simply making a function invocation,this refers to

the Global object that does not have any Employee properties

and hence produces undefined whenever a property on this is

used.

In the section,we replace the inner function with an arrow function.

In this case,the this keyword refers to the context of the function

enclosing the arrow function unlike the previous case where it referred

the Global object.At the point,it is important to note that arrow functions

do not change their context on invocation.

function Employee(firstName, department, salary) {
this.firstName = firstName;
this.department = department;
this.salary = salary; this.getInfo = function(){
return() => {
console.log(this.firstName + " from " +
this.department + " earns " + this.salary);
};
}
} let jim = new Employee ('Jim', 'Finance', 5200); let printInfo = jim.getInfo();
printInfo();
function Employee(){
this.firstName = "Jack",
this.department = "HR",
this.salary = 4500, this.getContext = () => {
console.log(this);
} let mark = new Employee();
mark.getContext(); let context = mark.getContext;
context();
}

In the above example,the context of the arrow function was set

on declaration and it cannot be changed.An important thing to note

here is that you cannot "rebind" an arrow funtion.The context

always fixed.

var details = {
number: 42,
opration: function(){
return () => console.log(this.number);
}
}; var details = {
number: 84
}; details.opration().bind(details2)();

In the example,we are setting the details2 number to 84.But we

now we can't bind a new object to arrow function.The engine does

not throw any error,it just ingores the bind completely. So

42 is printed even if we call the opration method with the details2

object.This also applies to call and apply.So with an arrow function,

calls to bind,call or apply will not be able to change to value

of this.

var product = ( x, y ) => x * y;
console.log(product.call(null,2,3));
console.log(product.apply(null, [2,3])); var multiply = product.bind(null, 2, 3);
console.log(multiply());
var newFn = () => { },
object = new newFn();
var details = () => 42;
console.log(details.hasOwnProperty("prototype"));

Using arrow function

So,whenever you have a short single-statement inline function

expression,with a computed return value and the function does not

make a reference a self-reference,you can replace it with an

arrow function.

$('.btn').on('click', function(){
var self = this; setTimeout({
$(self).toggleClass('btn-active');
},1000);
});
$('.btn').on('click',function(){
setTimeout(() => {
$(this).toggleClass('btn-active');
},1000);
});

ES6 new syntax of Arrow Function的更多相关文章

  1. ES6 new syntax of Default Function Parameters

    Default Function Parameters.md Default Function Parameters function getSum(a,b){ a = (a !== undefine ...

  2. es6语法中的arrow function=>

    (x) => x + 相当于 function(x){ ; }; var ids = this.sels.map(item => item.id).join() var ids = thi ...

  3. ES6 箭头函数(arrow function)

    例行声明:接下来的文字内容全部来自 Understanding ECMAScript 6,作者是Nicholas C.Zakas,也就是大名鼎鼎的Professional JavaScript for ...

  4. [ES6系列-02]Arrow Function:Whats this?(箭头函数及它的this及其它)

    [原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 如果没用过CSharp的lambda 表达式,也没有了解过ES6,那第一眼看到这样代码什么感觉? /* eg.0 * fu ...

  5. [ES6] 06. Arrow Function =>

    ES6 arrow function is somehow like CoffeeScirpt. CoffeeScript: //function call coffee = -> coffee ...

  6. vue & lifecycle methods & this bug & ES6 Arrow function & this bind bug

    vue & lifecycle methods & this bug ES6 Arrow function & this bind bug bad fetchTableData ...

  7. ES6 Arrow Function & this bug

    ES6 Arrow Function & this bug let accHeadings = document.querySelectorAll(`.accordionItemHeading ...

  8. ES6 Arrow Function All In One

    ES6 Arrow Function All In One this const log = console.log; const arrow_func = (args) => log(`arg ...

  9. ES6 arrow function vs ES5 function

    ES6 arrow function vs ES5 function ES6 arrow function 与 ES5 function 区别 this refs xgqfrms 2012-2020 ...

随机推荐

  1. Konckout第六个实例:自定义组件 -- 发表评论

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. RedHat/Fedora/Centos 下bash 自动补全命令

    本文转自:运维生存时间:http://www.ttlsa.com/linux/rhel- ... matically-function/ linuser  :http://www.linuser.co ...

  3. 开始补习JavaScript的第一天

    JavaScript介绍: ①.JavaScript是一种解释性的,基于对象的脚本语言. ②.JavaScript是一种轻量级的编程语言,可以嵌入到html页面中,由浏览器来解释执行. ③.JavaS ...

  4. 数据结构基础——指针及动态内存分配(malloc)

    一.指针 C语言中的指针是一种数据类型,比如说我们用int *a;就定义了一个指针a,它指向一个int类型的数.但是这个指针是未初始化的,所以,一般的,我们都在创建指针时初始化它,以免出错,在还不吃的 ...

  5. 【Swift】Runtime动态性分析

    Swift是苹果2014年发布的编程开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序.Swift已经开源,目前最新版本为2.2.我们知道Objec ...

  6. Django 博客

    blogproject/blogproject/settings.py ## 其它配置代码... # 把英文改为中文 LANGUAGE_CODE = 'zh-hans' # 把国际时区改为中国时区 T ...

  7. Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结

    (1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...

  8. 外网访问本地服务器下的web应用

    让本地服务器可以在外网访问的方式有很多,介绍其中一种: 由于本人是在自己电脑上装了一个虚拟机, 测试环境为:虚拟机作为服务器,服务器中装了一个禅道,虚拟机IP192.168.2.221,本人通过tpl ...

  9. IntelliJ IDEA sass环境配置及常见报错处理

    1.下载安装ruby,网上教程很多的,安装完之后在命令行输入ruby -v检查一下是否安装成功了.(注意安装的时候要勾选第二项).

  10. 一种dubbo逻辑路由方案

    背景介绍 现在很多的公司都在用dubbo.springcloud做为服务化/微服务的开发框架,服务化之后应用越来越多,链路越来越长,服务环境的治理变的很困难.比如:研发团队的人很多的,同时有几个分支在 ...