零散知识点-类的区别;函数式编程的简单总结;

.class1.class2和.class1 .class2和.class1, .class2的区别

.class1.class2(中间没有空格)匹配的是同时拥有class1和class2的元素;

.class1 .class2 匹配的是父节点有.class1,子节点有.class2的元素;

.class1, .class2 (中间逗号分隔) 设置class1,class2拥有相同的样式;

函数式编程的简单理解(详见阮一峰

  • 函数式编程要求函数必须是纯的,不能有副作用。原因是函数式编程的起源是一门叫做范畴轮的数学分支。所以本质上,函数式编程只是范畴论的运算方法,跟数理逻辑、微积分、行列式是同一类东西,都是数学方法,只是碰巧它能用来写程序。它是一种数学运算,原始目的就是求值,不做其他事情,否则就无法满足函数运算法则了。

  • 函数式编程有两个最基本的运算:合成和柯里化。

    • 合成
      如果一个值要经过多个函数,才能变成另外一个值,就可以把所有中间步骤合并成一个函数,这叫做"函数的合成";
const compose = function (f, g) {
  return function (x) {
    return f(g(x));
  };
}
- 柯里化
f(x)和g(x)合成为f(g(x)),有一个隐藏的前提,就是f和g都只能接受一个参数。如果可以接受多个参数,比如f(x, y)和g(a, b, c),函数合成就非常麻烦。这时就需要函数柯里化了。所谓"柯里化",就是把一个多参数的函数,转化为单参数函数。
// 柯里化前
function add(x, y){
    return x + y;
}
console.log(add(1, 2));//3
// 柯里化后
function addX(y){
   return function(x){
     return x + y;
  };
}
console.log(addX(2)(1));//3
posted @ 2017-08-31 17:29  终身学习者  阅读(206)  评论(0编辑  收藏  举报