Js箭头函数和lambda

时间: 2019-07-11阅读: 29标签: 函数

() => {} 基本特点

es6中的箭头函数,在实际开发中确实比较方便,通常来说会有几个特点:

  • 箭头函数中的this会绑定在外部作用域
  • 没有arguments
  • 如果想返回一个对象记得加()包裹
  • call和apply不能传入this
(() => {a: 1})() //返回值为undefiend,想返回对象,使用下面的方式
(() => ({a: 1})()


箭头函数和lambda表达

lambda在计算机科学中表示匿名函数,本质上是用来简化操作的。简单来说,是一种表示方法,代表了一定的输入和输出。

step1:

实现一个平方运算表达(x * x): 
数学表达式(λ代表一个表达式的输入):

λx.x * x

用JavaScript实现:

(function (x) {
  return x * x;
})()

step2:

在平方的基础上再加2(x * x + 2): 
数学表达式:

(λx.x * x)(λx.x + 2)

用Javascript实现:

(function(x) {
  return x + x
})((function () {
  return x * x
})())

其实就是利用了匿名函数然后,再继续嵌套。 
但是有了箭头函数,就可以更加简便地实现上面的操作:

(x => x + 2)((x => x * x)())

step3:

更加优雅地实现,其实向上面这种方式,不是特别优雅,可读性不好,需要一种能够更加优雅地方式:

上面的行为抽象出来就是:前一个的输出作为后一个函数的输入,应该怎么实现呢?Javascript中提供了reduce这一个方法。
const action = [
  x => x * x,
  x => x + 2
];

let res = action.reduce((res, cur) => cur(res), 2);

step4:

总结:从上面的过程可以看出来,有两个主要的关键过程:

  • 1、箭头函数是一个匿名函数,简化书写
  • 2、箭头函数作为变量传递给reduce函数的回调

所以箭头函数在很大程度上,简化了函数式的操作。其实lambda表达式,在Javascript中就是匿名函数。


箭头函数使用总结:

  • 箭头函数适合纯函数的操作,比如map、filter、reduce等操作
  • 箭头函数内部,一般不要使用this,因为this是和外部作用域绑定的,容易产生问题


问题1:

function A() {
  this.foo = 1
}

A.prototype.bar = () => console.log(this.foo)

let a = new A()
a.bar()  //undefined

因为对象a,并没有构成一个作用域。

如果想让this指向A,可以这样写:

function A() {
  this.foo = 1;
  this.bar = () => {
    console.log('value', this.foo);
  }
}
let a = new A();
a.bar(); //1

因为bar的声明在函数A的作用域内部。


问题2:

const A = {
  foo: 1,
  bar: () => {
    console.log('value', this.foo);
  }
}
let a = Object.create(A);
a.bar(); //undefined

如果想输出正常的值,应该使用function定义:

const A = {
  foo: 1,
  bar: function (){
    console.log('value', this.foo);
  }
}
let a = Object.create(A);
a.bar(); // value 1

链接: http://www.fly63.com/article/detial/4638

云函数

云函数提供了一种 直接在云上运行,无状态的、短暂的、由事件触发的代码 的能力。ServerLess,即无服务器架构,也叫轻服务,它包含两个部分,如下:

js函数、作用域、声明提前、arguments对象

函数的定义:用来执行某些特定功能的代码,为了减少重复使用代码,需要的时候直接调用。函数名:根据功能来自己定义的名称;参数:传入函数内的变量;这里的参数是形参(形式参数),可以给形参赋值

js声明函数

JS声明函数的三种方式:函数表达式: function操作符创建函数, 表达式可以存储在变量或者对象属性里. 往往被称为匿名函数, console.log(h.name); 可以看到打印为空;函数声明: 具名函数, 且函数能在其所在作用域的任意位置被调用

js中reduce()方法

reduce() 方法接收一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(上一次回调的返回值),当前元素值,当前索引,原数组。

js构造函数:实例与new对象

构造函数函数特点1.函数体内使用了this关键字,代表了所要生成的对象实例2.生成对象的时候必须使用new命令3每个函数都自动添加一个名称为prototype属性,这是一个对象4每个对象内部都有一个属性_proto_

javscript函数的运用

函数,一段能够自动完成某些功能的代码块,函数的出现,既解决了重复使用重一功能的需求,又可以避免代码的臃肿性。使用函数有两个要求:必须调用后才可以执行;函数名不要和关键字以及系统函数相同;

js中(function(){…})()立即执行函数写法理解

( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此

Js高阶函数(Heigher-order function)

满足以下条件:接受一个或多个函数作为输入/输出一个函数;高阶函数一般是那些函数型包含多于函数。在函数式编程中,返回另一个函数的高阶函数被称为Curry化的函数。

函数式编程术语及示例

函数式编程有许多优势,由此越来越受欢迎。然而每个编程范式 (paradigm) 都有自己唯一的术语,函数式编程也不例外。我们提供一张术语表,希望使你学习函数式编程变得容易些。

Js中的普通函数与构造函数比较

想必学过javascript函数的同学想必能细心的发现,同样是函数,为什么有个函数要加上new关键字呢,加上他们的意义又是什么,作用于什么场景,下面我们就来给大家详细介绍一下。什么是构造函数?构造函数的优点与缺点?

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全