1、柯里化和偏函数

  偏函数

  假如一个函数有两个参数,然后第一个参数我们调用的时候是确定的,那么我门就可以创建一个偏函数来简化参数传递的问题

  示例

  function mul(a,b){

    return a * b;

  }

  let double = mul.bind(null,2);

  alert(double(3));//=mul(2,3) =6

  let triple = mul.bind(null,3);

  alert(triple(3));// = mull(3,3)=9

  无上下文使用偏函数

 function partial(func, ...argsBound) {
return function(...args) { // (*)
return func.call(this, ...argsBound, ...args);
}
} // 用法:
let user = {
firstName: "John",
say(time, phrase) {
alert(`[${time}] ${this.firstName}: ${phrase}!`);
}
}; // 添加一个偏函数方法,现在 say 这个函数可以作为第一个函数
user.sayNow = partial(user.say, new Date().getHours() + ':' + new Date().getMinutes()); user.sayNow("Hello");
// 结果就像这样:
// [10:00] John: Hello! partial(func[, arg1, arg2...]) 调用的结果是一个基于 func 的封装函数,以及:
和它传入的函数一致的 this (对于 user.sayNow 调用是 user)
然后传入 ...argsBound —— 来自偏函数调用传入的参数("10:00")
然后传入 ...args —— 传入封装函数的参数(Hello)

  柯里化

  个人理解:多个函数的嵌套

function curry(func) {
return function(a) {
return function(b) {
return func(a, b);
};
};
} // 用法
function sum(a, b) {
return a + b;
} let carriedSum = curry(sum); alert( carriedSum()() ); //

  柯里化是将 f(a,b,c) 可以被以 f(a)(b)(c) 的形式被调用的转化。JavaScript 实现版本通常保留函数被正常调用和在参数数量不够的情况下返回偏函数这两个特性

2、箭头函数

  箭头功能没有“this”

  箭头函数没有this。如果访问this,则从外部获取  

 let group = {
title: "Our Group",
students: ["John", "Pete", "Alice"], showList() {
this.students.forEach(
student => alert(this.title + ': ' + student)
);
}
}; group.showList();

  但是foreach内部,如果封装了一个函数,就会丢失this

 let group = {
title: "Our Group",
students: ["John", "Pete", "Alice"], showList() {
this.students.forEach(function(student) {
// Error: Cannot read property 'title' of undefined
alert(this.title + ': ' + student)
});
}
}; group.showList();

  箭头函数没有“arguments”(参数)

  箭头函数

 function defer(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms)
};
} function sayHi(who) {
alert('Hello, ' + who);
} let sayHiDeferred = defer(sayHi, );
sayHiDeferred("John"); // 2 秒后打印 Hello, John

  无箭头函数

 function defer(f, ms) {
return function(...args) {
let ctx = this;
setTimeout(function() {
return f.apply(ctx, args);
}, ms);
};
}

javaScript 基础知识汇总 (十一)的更多相关文章

  1. JavaScript基础知识汇总

    1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...

  2. javaScript 基础知识汇总(三)

    1.循环:while 和 for while 循环 while(condition){ //代码 循环体 } do ... while  循环 let i =0; do { //循环体 }while( ...

  3. javaScript 基础知识汇总(六)

    1.基本类型与对象的区别 基本类型:是原始类型的中的一种值. 在JavaScript中有6中基本类型:string number  boolean  symbol  null  undefined 对 ...

  4. javaScript 基础知识汇总(五)

    1.垃圾回收 JavaScript 的内存管理是自动的,不能强制执行或者阻止执行 可达性 JavaScript中主要的内存管理概念是可达性. 什么是可达性? 定义一个对象 let user = { n ...

  5. javaScript 基础知识汇总(二)

    1.运算符 术语或者叫法:一元运算符.二元运算符.运算元(参数) let x=0; x=5+2; //5和2为运算元,“+” 为二元运算符: x=-x; //"-" 为一元运算符 ...

  6. javascript 基础知识汇总(一)

    1.<script> 标签 1) 可以通过<script> 标签将javaScript 代码添加到页面中 (type 和language 属性不是必须的) 2)外部的脚本可以通 ...

  7. JavaScript 基础知识汇总目录

    一.标签.代码结构.现代模式.变量.数据类型.类型转换 GO 二.运算符.值的比较.交互.条件运算符.逻辑运算符 GO 三.循环 while 和 for .switch语句.函数.函数表达式和箭头函数 ...

  8. javaScript 基础知识汇总 (十三)

    1.Class 在JavaScript中 calss即类是一种函数 基本语法 class Myclass{ constructor(){} method1(){} method2(){} method ...

  9. javaScript 基础知识汇总(七)

    1.数组 特点:数组是可以存储有序集合的对象. 声明: let arr = new Array();   let arr=[]; 大多数情况下我们使用第二种. let fruits = [" ...

随机推荐

  1. u盘出现大文件无法复制的解决

    如果u盘出现大文件无法复制的情况,修改U盘的文件系统格式: 把U盘格式化为NTFS格式.  FAT32的都不能放4G+的文件;右键格式化里如果没有NTFS,就在开始运行里输入cmd 然后输入" ...

  2. Java IO: OutputStream

    原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) OutputStream类是Java IO API中所有输出流的基类.子类包括Buffere ...

  3. ionic2踩坑之ionic build android报错

    自己项目一直跑的好好好好的,build还是run都没问题,今天忽然一个小伙伴build一直报错.\ 错误如下: Error occurred during initialization of VMCo ...

  4. java MVC 自定义类型转换器(Formatter、AnnotationFormatterFactory)

    下面一个事例,是将传入的一个身份证号,转换成一个对象(提取身份证号的地址.出身日期.性别等) 实体类 Person 有三个字段如下: String province; //地址 Date birthd ...

  5. jquery一些 事件的用法

    在jquery中有许多的事件,在使用时可分为两类吧,一种是基本的事件,如click.blur.change.foucus等,这些是通过简单封装js用法,使用如: $("a[name=link ...

  6. 第十届javaB(5)

    试题 E: 迷宫 本题总分:15 分[问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方.010000 000100 001001 110000迷宫的入 ...

  7. angularJS进阶阶段(4)

    angularJS进阶阶段(4) 编译器/$compile 编译器$compile是一个AngularJS的内置服务,它负责遍历DOM树来查找匹配指令, 并调用指令的实现代码进行处理. HTML编译包 ...

  8. Oracle中的列转行实现字段拼接用例

    文章目录 Oracle中的列转行实现字段拼接 场景 在SQL使用过程中经常有这种需求:将某列字段拼接成in('XX','XX','XX','XX','XX','XX' ...)做为查询条件. 实现 s ...

  9. 关于vue+element-ui项目的分页,返回默认显示第一页的问题解决

    关于vue+element-ui项目的分页,返回默认显示第一页的问题解决     问题描述 当前页面如下: 然后点击页码跳到第3页,然后在第三页点击页面链接跳转到新的页面 然后在新页面点击返回按钮,返 ...

  10. 非对称加密算法RSA 学习

    非对称加密算法RSA 学习 RSA加密算法是一种非对称加密算法.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Ad ...