JS递归学习笔记
1递归函数
1.1定义
/**
* Created by kikop on 2018/2/23.
*/
function factorial (num) {
if (num <= 1) {
return 1;
} else {
return num * factorial(num - 1);
}
}
1.2调用
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="../openjs/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="../skilljs/myrecursion1.js"></script>
<script type="text/javascript">
$(function () {
var another=factorial;
factorial=null; //这以后,factorial已经不再是函数
alert(another(4));
})
</script>
1.3引用导致的错误
factorial=null; //这以后,factorial已经不再是函数
2arguments解决
Arguments.callee是一个指向正在指向的函数指针。
/**
* Created by kikop on 2018/2/23.
*/
function factorial (num) {
if (num <= 1) {
return 1;
} else {
//return num * factorial(num - 1);
return num * arguments.callee(num - 1);
}
}
3终极解决方案
/**
* Created by kikop on 2018/2/23.
*/
//创建一个名为 namedF 的命名函数表达式
//优点:
//1.严格模式下不会出错
var factorial = (function namedF(num) {
if (num <= 1) {
return 1;
} else {
return num * namedF(num - 1);
}
});