您的位置:首页 > Web前端 > JavaScript

JavaScript学习笔记(八)--- 函数表达式

2014-09-08 12:48 561 查看
1.递归

实现一:

function factorial(num){
if(num<=1){
return 1;
}else{
return num*factorial(num-1);
}
}
alert(factorial(4)); //24


但给factorial重赋值时,再调用就会出错。

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //TypeError: factorial is not a function


实现二:

使用arguments.callee解决上面问题。

function factorial(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
alert(factorial(4)); //24


修改factorial,再调用

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //24


实现三:

在严格模式下,不能通过脚本访问arguments.callee。解决办法,使用命名函数表达式。

var factorial = (function f(num){
if(num<=1){
return 1;
}else{
return num*f(num-1);
}
});

alert(factorial(4)); //24


以上代码创建了一个名为f()的命名函数表达式,然后将它赋值给变量factorial。

把函数赋值给另一个变量,函数的名字f仍然有效。这种方式在严格模式和非严格模式下都行得通。

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //24


2.闭包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: