JS自定义函数
1.递归
说明:递归表示函数自己调用自己,分两种方式:直接、间接调用
注意:需保证递归能够正常结束,否则进入死循环
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS自定义函数</title>
<script type="text/javascript">
var a=0,b=0;
// 直接调用
function test1(){
console.debug(a);
if(++a<5){
test1();
}
}
// 间接调用
function test2(){
console.debug("this is test2 b="+b);
if(++b<5){
test3();
}
}
function test3(){
console.debug("this is test3");
test2();
}
</script>
</head>
<body>
<input type="button" value="test1" onclick="test1()">
<input type="button" value="test2" onclick="test2()">
</body>
</html>
先后分别电机test1、test2按钮,后台运行结果:
经典案例:汉诺塔
// 汉诺塔
var n=3;
function hanoi(n){
// 将n个盘子从A柱借助B柱移动到C柱
move(n,'A','B','C');
}
function move(n,from,middle,to){
if(n==1){//如果只有一个盘子就直接移动到目标柱
console.debug(n+":"+from+"-->"+to);
}
else{
// 先将n-1个盘子从起始柱借助目标柱移动到中间柱
move(n-1,from,to,middle);
// 再将最后一个盘子从起始柱移到目标柱
console.debug(n+":"+from+"-->"+to);
// 最后将n-1个盘子从中间柱借助起始柱移到目标柱
move(n-1,middle,from,to);
}
}
演示结果:
2.回调
不立即执行的函数调用,满足一定条件时执行或由别的代码调用执行,只有函数名,没有括号“()”和参数
用途:用于事件绑定或者函数参数
事件绑定:常见的有window.onload=test();表示页面加载完成后执行函数test
函数参数:可观察定时器(setTimeout/setInterval)的用法
函数参数举例:
<script type="text/javascript">
function getMax(a,b){
return a>b?a:b;
}
function test1(){
doCompare(3,7,getMax);
}
function doCompare(a,b,compare){
var ret=compare(a,b);
console.debug(a+"、"+b+"中最大值为:"+ret);
}
</script>
后台运行结果:
3.匿名函数
- 没有函数名的函数;一般用于回调,也可能用于一次性执行的函数,执行完成后自动销毁,节省空间。
- 大小: 14.3 KB
- 大小: 2.9 KB
- 大小: 3.1 KB
分享到:
相关推荐
PHP 5.3引入了匿名函数,也叫闭包,它是一种没有名字的函数,常用于快速实现简单的回调函数。例如: ```php $add = function($a, $b) { return $a + $b; }; echo $add(3, 5); // 输出:8 ``` 7、使用自定义函数...
综上所述,匿名函数在JavaScript中扮演着至关重要的角色,不仅可以用于创建立即执行的代码块,实现作用域隔离,还可以作为参数传递、实现回调机制,甚至用于封装私有和公共功能,提高代码的封装性和安全性。...
C++11引入了lambda表达式,它允许我们在运行时创建匿名函数,这对于编写简洁的代码和处理回调函数非常方便。 在提供的"新建文件夹"中,可能包含这些概念的示例代码,通过学习和实践这些实例,可以帮助你更好地理解...
6. **回调函数与匿名函数** 回调函数是将函数作为参数传递给另一个函数。匿名函数(也叫闭包)是一种没有名字的函数,可以作为参数传递,或者存储在变量中。 7. **错误处理与异常** PHP提供错误报告机制,如`...
4. **匿名函数和Lambda表达式**:DELPHI支持匿名函数,即没有名字的函数,通常用于简化代码和回调。Lambda表达式是实现匿名函数的一种方式,手册会展示如何使用它们。 5. **递归函数**:递归函数是自己调用自己的...
同时,闭包也可以用于延迟执行,例如在事件驱动或回调函数的场景下。 总结来说,PHP的闭包为递归提供了新的实现方式,它不仅可以简化代码,还能提高代码的复用性和可扩展性。理解并熟练掌握闭包的使用,将有助于...
匿名函数非常灵活,因为它们不需要显式命名,常用于事件处理、回调函数以及其他需要临时函数的地方。 函数的调用方式有多种,包括方法调用模式、函数调用模式和构造器调用模式。方法调用模式是指将函数作为对象的一...
回调函数通常通过匿名内部类或者Lambda表达式实现。在Java 8及以后的版本中,Lambda表达式使得编写回调函数变得更加简洁。例如,你可以定义一个`FileFilter`接口的实现,然后将其作为参数传递给`listFiles()`,这样...
C++11引入了lambda表达式,它提供了一种快速创建匿名函数的方式,常用于函数对象和算法。 以上是VC++函数经典的一些关键概念,掌握这些知识点将有助于编写高效、灵活的C++程序。在实际编程中,应结合具体需求灵活...
匿名函数可以临时创建,用于简化代码,特别是在需要回调函数的场景。 七、内联函数 内联函数是为提高效率而引入的,通过预处理器指令`inline`请求编译器尽可能地在调用处展开函数,减少函数调用开销。但这不是保证...
这种机制常用于回调函数和事件驱动编程。 9. **匿名函数(Lambda表达式)**: 虽然C语言不直接支持Lambda表达式,但可以使用`typedef`和函数指针来模拟类似的功能,创建可传递的代码块。 10. **函数重载与多态**...
C语言允许我们定义指向函数的指针,这在回调函数、算法实现(如排序)和事件驱动编程中非常有用。例如,`void (*compare)(const void*, const void*)`是一个比较函数指针类型,可以用来传递给`qsort()`进行排序。 ...
4. **回调函数**:在异步操作中,如定时器或Ajax请求,匿名函数常作为回调: ```javascript setTimeout(function() { console.log('Timer done'); }, 1000); ``` 匿名函数在JavaScript中的使用不仅有助于提高...
Lambda表达式是匿名函数的一种形式,如:`var Sum := function(a, b: Integer): Integer { return a + b; };` 7. **递归函数** - 递归函数是调用自己的函数,通常用于解决分治问题或数据结构遍历,如计算阶乘或树...
它是一个没有名字的函数,常用于回调函数或需要短暂使用的简单功能: ```php $add = function($x, $y) { return $x + $y; }; echo $add(3, 4); // 输出 7 ``` 七、递归函数 递归函数是一种调用自身的函数,通常...
在Node.js中,回调函数是一种处理异步操作的重要机制,因为JavaScript是单线程的,不能同时执行多个任务。回调函数使得程序能够非阻塞地处理I/O操作和其他耗时任务。 首先,我们来看如何向回调函数传递额外的参数。...
9. **匿名函数**:也叫lambda函数,它是一种没有名字的函数,通常用于一次性、简单的任务,可以在不需要为函数命名的情况下快速定义一个函数。 10. **函数式编程**:这是一种编程范式,强调使用函数来构建程序,...
在这个例子中,`counter`函数返回一个内部定义的匿名函数,这个匿名函数可以访问`counter`函数的作用域,包括`count`变量。因此,每次调用`myCounter()`时,`count`都会增加,记录了函数被调用的次数。 另一个相关...
这在处理回调或高阶函数时非常有用。 8. **递归函数** 递归函数是调用自身的函数,常用于解决需要反复进行相同操作的问题,如计算阶乘或遍历树形结构。 9. **重载函数** Delphi允许函数重载,即同一个函数名可以...
- **函数表达式**(Function Expression):如`var myFunction = function() {}`或匿名函数`var myFunction = function() {}`。函数表达式不会被提升,且可以用于立即调用。 2. 参数: - **形参(Formal ...