- curry
const curry=x=>y=>x+y;
console.log(curry(2)(3)); //5;
- destructuring
const {name,...user}={name:'komolei',age:24,sex:'female',family:'one'} //name:komolei ;user:{age:24...}
- high order function
[].sort.call([2,1,3,4],(p,n)=>p-n) // 1,2,3,4
[].map.call([2,4,5],item=>item*2) //4,8,10
[].filter.call([2,4,5],item=>item>2) // 4,5
[].reduce.call([2,4,5],(p,n)=>p+=n); // 11
[].forEach.call([2,4,5],item=>console.log(item*2))
- call & apply
var p={
name:'komolei',
add:function(p){
console.log('name',p.name)},
age:function(p){
console.log('age',p.age)}}
p.name // komolei
p.add({name:'ddd'}) // name ddd
// 当写成上面这样的时候,我们想要调用就只能输入参数进行调用。
// 能不能这样调用:p.add()
// 可以,使用this
var p1={
name:'komolei',
add:function(){
console.log('name',this.name)},
age:function(){
console.log('age',this.age)}}
// p1.add() //name komolei
// p1.add('xxx') //想要这样传参数是error的。不是废话嘛?函数是什么?接受参数,return 结果的工具。
// 那怎么传递参数呢?
// p1.add.call({name:'ccc'}) //ccc
// this在函数中相当于占位符,当调用的时候才会想去替换真正的参数。
// call 传参有限,apply接受数组作为参数。
- bind
// bind 返回一个全新的深拷贝过的函数,同时绑定的this为返回的函数的call的this
// mini program
// var that=this
that.onClick=function(){}
// this.onClick.bind(this) //上下相同。
ramda -fp utility tool
这几天一直在看function program,简称fp,与平常的面向对象的程序不一样。好吧,我也不知道怎么理解面向对象,就是万物皆对象,将所有的事物抽象成对象,来模拟现实的环境。对应js。就是基于原型链来写对象原型。所有的属性就是this上的字段。所有的方法。都写在propertype上。别的也没有什么想法了。最多es6,class般的语法糖吧。突然发现call,apply,bind的厉害了。动态切换this。断言函数