ES6函数尾调和caller

function factorial(n, total=1) {
	if (factorial.caller !== factorial && arguments.length >1)
		throw new Error('only one param');
	if (n < 3) return n*total;
	return factorial(n - 1, n * total);
}

最近学习ES6,看到函数尾调这个新特性,对函数递归调用真是太有用了!我们知道递归调用算法可以写得很简单,但效率不高,但如果用上了尾调就高效了!上面是阶乘的递归尾调。如果JS支持断言就更简单了:

function factorial(n, total=1) {
	if (factorial.caller !== factorial)
		assert(arguments.length === 1, 'only one param');
	if (n < 3) return n*total;
	return factorial(n - 1, n * total);
}

注意:factorial.caller不能用arguments.caller

你可能感兴趣的:(JS)