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. scarce|component|

    ADJ-GRADED 缺乏的;不足的;供不应求的If something is scarce, there is not enough of it. Food was scarce and expen ...

  2. inventor卸载/完美解决安装失败/如何彻底卸载清除干净inventor各种残留注册表和文件的方法

    在卸载inventor重装inventor时发现安装失败,提示是已安装inventor或安装失败.这是因为上一次卸载inventor没有清理干净,系统会误认为已经安装inventor了.有的同学是新装 ...

  3. 浅谈Java转义符\\|

    看一段程序 String t = "a||b||c||d"; String[] temp = t.split("\\|\\|"); System.out.pri ...

  4. spring学习笔记一:spring介绍

    jar包下载地址:http://repo.spring.io/release/org/springframework/spring/ spring特点: 1.非侵入性 spring框架的API不会在业 ...

  5. Ubuntu和window10 安装双系统

    先安装window10,然后空出一部分储存空间,我空出来了103G. 然后安装ubuntu分区的时候注意: 刚开始安装的时候:出现安装类型的时候:选择其他选项: 在分区的时候:单击127117(这里是 ...

  6. Docker快速安装kafka

    Docker快速安装kafka | 沈健的技术博客 盒子 盒子 博客 分类 标签 友链 搜索 文章目录 同样基于docker-compose安装,Docker快速部署nginx中有讲到,不在重述 1. ...

  7. 语言发展与python

    编程语言的发展史(机械语言.汇编语言.高级语言) 机械语言:直接使用二进制与计算机沟通,直接操作硬件,执行效率高,开发效率低. 汇编语言:用简单的英文代替二进制,直接操作硬件,执行效率较机械语言低,开 ...

  8. 读书笔记——《在线》

    * 2017年10月24日 星期二 晴* ## "在线"是未来世界发展的关键.一个事物是不是符合未来发展的趋势,就是要看它是否在线. 插图 **在线** 正文 作者是王坚,阿里巴巴 ...

  9. Python scan查找Redis集群中的key

    import redis import sys from rediscluster import StrictRedisCluster #host = "172.17.155.118&quo ...

  10. LISTAGG函数

    官网进入 该函数作用是可以实现对列值得拼接: 根据官网介绍,可以对列值排序进行拼接,也可以分组拼接 1.1运行结果 1.2运行结果 2运行结果 注意该函数提供的 over( partition by ...