【JavaScript高级程序设计】11、函数表达式(1))
1、递归
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<script type="text/javascript">
//关于递归,由于JavaScript中的函数可以作为一个对象赋值给相应的变量
//所以在递归的时候最好不使用函数名来做递归调用对象
function factorial(num)
{
if(num <= 1)
{
return 1;
}
else
{
return num * factorial(num - 1);
}
}
//这个就是一个典型的递归求阶乘,但是有一个问题,如果函数名被作为一个变量使用的时候就会出问题
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //这里就会出错,因为函数里面要调用的num * factorial(num - 1)而factorial已经为null
//借助arguments.callee(num - 1)函数可以避免函数名的调用
function factorial(num)
{
if(num <= 1)
{
return 1;
}
else
{
return num * arguments.callee(num - 1);
}
}
</script>
</head>
<body>
</body>
</html>

因为下面那个函数吧上面的屏蔽掉了,所以就会有结果,如果把第二个函数去掉就会报错
2、闭包与变量
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<script type="text/javascript">
function createFunctions()
{
var result = new Array();
for(var i = 0; i < 10; ++i)
{
result[i] = function()
{
return i;
};
}
return result;
}
var func = createFunctions();
//every function outputs 10
for (var i=0; i < func.length; i++)
{
document.write(func[i]() + "<br />");
}
</script>
</head>
<body>
</body>
</html>

为了避免引用数据
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<script type="text/javascript">
//如果是引用的话为了避免值被修改
function createFunctions()
{
var result = new Array();
for(var i = 0; i < 10; ++i)
{
result[i] = function(num)
{
return function()
{
return num;
};
}(i);
}
return result;
}
var func = createFunctions();
//every function outputs 10
for (var i=0; i < func.length; i++)
{
document.write(func[i]() + "<br />");
}
</script>
</head>
<body>
</body>
</html>


浙公网安备 33010602011771号