Js箭头函数和lambda

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

() => {} 基本特点

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
吐血推荐

1.站长广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入...

2.休闲娱乐: 网页游戏  直播/交友   H5游戏

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

Js map、reduce、filter 等高阶函数

高阶函数是对其他函数进行操作的函数,可以将它们作为参数或通过返回它们。简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回。例如Array.prototype.map,Array.prototype.filter

Js的函数申明、函数表达式、箭头函数

函数声明和表达式之间的差别是:JavaScript 解释器中存在一种变量声明被提升的机制,也就是说函数声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面。而用函数表达式创建的函数是在运行时进行赋值

a标签调用js函数写法总结

这是常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而且javascript:协议作为a的href属性的时候不仅会导致不必要的触发window.onbeforeunload事件,在IE里面更会使gif动画图片停止播放。

JS中function

在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地;声明方式创建函数--会被声明提前

JavaScript 自己写一个 replaceAll() 函数

JavaScript 的 replace() 方法可以在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。但是,只输入字符串的话,仅替换第一个字符,当然也可以用正则表达式来进行全局替换:

jQuery.toggleClass() 函数详解

toggleClass()函数用于切换当前jQuery对象所匹配的每一个元素上指定的css类名。所谓切换就是如果该元素上已存在指定的类名,则移除掉;如果不存在,则添加该类名。该方法检查每个元素中指定的类。

Js函数curry化

最近的某次面试被问到了两次相关的问题,但是自己居然都没答好,尤其第二次,先来看看面试官给的题目是什么样子的:这一问给我问懵逼了,add(1)(2)(3)() === add(0)(2)(4)();这样的咱会实现啊,你再多加几个参数咱也能实现啊

js中函数的原型

js中每一个构造函数都有一个prototype的属性,prototype指向一个对象,而这个对象的属性和方法都会被构造函数的实例所继承,因此,需要一些共享的属性和方法可以写在构造函数的原型中

JavaScript全局属性和全局函数

调用上面的全局函数而不是全局方法的属性是有意义的,因为函数是全局调用的,而不是任何对象。 无论如何,您也可以调用这些函数方法,因为它们是运行它们的全局对象的方法。在web浏览器中,全局对象是浏览器窗口

前端常用的js函数方法整理

判断js类型: js有自己判断方法 typeof 但是当他遇到引用类型的时候得到的结果往往不是我们想要的,有没有时候后台返回的参数是null或者undefined然后就被丢到了页面上,很难看,要每一个地方都去处理

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

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

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