javaScript中递归和arguments.callee
javaScript中递归和arguments.callee知识点
运行结果如下:
源码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javaScript中arguments.callee</title>
<style type="text/css">
input[type=button] {
background-color: #8E388E;
border: 0px solid #8E388E;
color: #fff;
width: 160px;
height: 40px;
border-radius: 6px; /*把边框做成圆角*/
}
</style>
<script type="text/javascript">
//现在arguments.callee已经不建议使用了,arguments是一个很大的对象,开销很大
//递归时,不建议使用arguments.callee(),建议使用函数声明或命名函数表达式
function factorial(n) {
return !(n > 1) ? 1 : factorial(n - 1) * n;
}
//
var result = [ 1, 2, 3, 4, 5 ].map(factorial);
console.log('*A*', result); //*A* (5) [1, 2, 6, 24, 120]
//
var result2 = [ 1, 2, 3, 4, 5 ].map(function(n) {
return !(n > 1) ? 1 : arguments.callee(n - 1) * n;
});
console.log('*B*', result2); //*B* (5) [1, 2, 6, 24, 120]
//
var result3 = [ 1, 2, 3, 4, 5 ].map(function factorial(n) {
return !(n > 1) ? 1 : factorial(n - 1) * n;
});
console.log('*C*', result3); //*C* (5) [1, 2, 6, 24, 120]
//NaN
console.log(undefined + 2);
//false false false
console.log(undefined <= 1, undefined >= 1, undefined > 1);
//
function create() {
return function(n) {
if (n <= 1)
return 1;
return n * arguments.callee(n - 1);
};
}
var result4 = create()(5);
console.log('*D*', result4); //*D* 120
//
function create2() {
return function myFun(n) {
if (n <= 1)
return 1;
return n * myFun(n - 1);
};
}
var result5 = create2()(5);
console.log('*E*', result5); //*E* 120
</script>
</head>
<body style="background-color: #CCE8CF;">
<h1>javaScript中arguments.callee</h1>
<div id="div1" style="background-color: Wheat; height: 100%;"></div>
</body>
</html>
//现在arguments.callee已经不建议使用了,arguments是一个很大的对象,开销很大
//递归时,不建议使用arguments.callee(),建议使用函数声明或命名函数表达式