ES6个人笔记记录——函数扩展

rest参数

add = (...value) => {
	console.log(value instanceof Array);
}

add(1,2,3,4,5)

name属性

let add2 = function(...values)  {
	let sum;
	for(let value of values){
		sum += value;
	}
	return sum;
}
console.log(add.name);
console.log(add2.name);

function foo1(){
	setTimeout(()=>{
		console.log('id:',this.id);
	},100);
}

function foo2(){
	setTimeout(function(){
		console.log('--id:',this.id);
	},100);
}

let id = 21;
foo1.call({id:42});
foo2.call({id:50});

ES7 绑定this

foo::bar
等价于bar.bind(foo)

foo::bar(...arguments)
等价于bar.bind(foo,arguments)

尾调用(函数式编程)指某个函数的最后一步调用另一个函数

function f(x){
	return 
}

尾递归

不会发生栈溢出,节省内存
// eg1
function factorial(n){
	if(n === 1) return 1;
	return factorial(n-1) * n;
}

console.log("递归",factorial(5));

function factorialWDG(n,total){
	if(n === 1) return total;
	return factorialWDG(n-1,n * total);
}

console.log("尾递归",factorialWDG(5,1));

// eg2
function Fibonacci(n){
	if(n <= 1) return 1;
	return Fibonacci(n-1) + Fibonacci(n-2);
}
// 问题,栈溢出
console.log("递归",Fibonacci(10));

function FibonacciWDG(n,ac1 = 1,ac2 = 1){
	if(n <= 1) return ac2;
	return FibonacciWDG(n-1,ac2,ac1 + ac2);
}

console.log("尾递归",FibonacciWDG(1000));

柯里化
意思是将多参数的函数转换成单参数的形式

function currying(fn,n){
	return function(m){
		return fn.call(this,m,n);
	};
}

function tailFactorial(n,total){
	if(n === 1) return total;
	return tailFactorial(n-1,n * total);
}

const factorialKL = currying(tailFactorial,1);

console.log("柯里化",factorialKL(5));

// method two
function factorial_2(n,total = 1){
	if(n === 1) return total;
	return factorial_2(n-1,n * total);
}
console.log("method 2",factorial_2(5));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值