`
兰色星座
  • 浏览: 10223 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

JS自定义函数(递归、回调、匿名函数)

阅读更多
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函数和自定义函数

      PHP 5.3引入了匿名函数,也叫闭包,它是一种没有名字的函数,常用于快速实现简单的回调函数。例如: ```php $add = function($a, $b) { return $a + $b; }; echo $add(3, 5); // 输出:8 ``` 7、使用自定义函数...

      匿名函数的一点知识

      综上所述,匿名函数在JavaScript中扮演着至关重要的角色,不仅可以用于创建立即执行的代码块,实现作用域隔离,还可以作为参数传递、实现回调机制,甚至用于封装私有和公共功能,提高代码的封装性和安全性。...

      几个关于c++函数实例

      C++11引入了lambda表达式,它允许我们在运行时创建匿名函数,这对于编写简洁的代码和处理回调函数非常方便。 在提供的"新建文件夹"中,可能包含这些概念的示例代码,通过学习和实践这些实例,可以帮助你更好地理解...

      PHP 常用函数 网上各类函数

      6. **回调函数与匿名函数** 回调函数是将函数作为参数传递给另一个函数。匿名函数(也叫闭包)是一种没有名字的函数,可以作为参数传递,或者存储在变量中。 7. **错误处理与异常** PHP提供错误报告机制,如`...

      DELPHI函数使用手册

      4. **匿名函数和Lambda表达式**:DELPHI支持匿名函数,即没有名字的函数,通常用于简化代码和回调。Lambda表达式是实现匿名函数的一种方式,手册会展示如何使用它们。 5. **递归函数**:递归函数是自己调用自己的...

      php基于闭包实现函数的自调用(递归)实例分析

      同时,闭包也可以用于延迟执行,例如在事件驱动或回调函数的场景下。 总结来说,PHP的闭包为递归提供了新的实现方式,它不仅可以简化代码,还能提高代码的复用性和可扩展性。理解并熟练掌握闭包的使用,将有助于...

      JavaScript函数的特性与应用实践深入详解

      匿名函数非常灵活,因为它们不需要显式命名,常用于事件处理、回调函数以及其他需要临时函数的地方。 函数的调用方式有多种,包括方法调用模式、函数调用模式和构造器调用模式。方法调用模式是指将函数作为对象的一...

      IO 目录列表器 回调函数 Thinking in java 4

      回调函数通常通过匿名内部类或者Lambda表达式实现。在Java 8及以后的版本中,Lambda表达式使得编写回调函数变得更加简洁。例如,你可以定义一个`FileFilter`接口的实现,然后将其作为参数传递给`listFiles()`,这样...

      vc++ 函数经典 vc++ 函数经典 vc++ 函数经典

      C++11引入了lambda表达式,它提供了一种快速创建匿名函数的方式,常用于函数对象和算法。 以上是VC++函数经典的一些关键概念,掌握这些知识点将有助于编写高效、灵活的C++程序。在实际编程中,应结合具体需求灵活...

      C函数预览 C函数预览 C函数预览 C函数预览 C函数预览

      匿名函数可以临时创建,用于简化代码,特别是在需要回调函数的场景。 七、内联函数 内联函数是为提高效率而引入的,通过预处理器指令`inline`请求编译器尽可能地在调用处展开函数,减少函数调用开销。但这不是保证...

      C语言函数帮助文档

      这种机制常用于回调函数和事件驱动编程。 9. **匿名函数(Lambda表达式)**: 虽然C语言不直接支持Lambda表达式,但可以使用`typedef`和函数指针来模拟类似的功能,创建可传递的代码块。 10. **函数重载与多态**...

      C语言函数大全(语法着色版)

      C语言允许我们定义指向函数的指针,这在回调函数、算法实现(如排序)和事件驱动编程中非常有用。例如,`void (*compare)(const void*, const void*)`是一个比较函数指针类型,可以用来传递给`qsort()`进行排序。 ...

      JavaScript中匿名函数的用法及优缺点详解

      4. **回调函数**:在异步操作中,如定时器或Ajax请求,匿名函数常作为回调: ```javascript setTimeout(function() { console.log('Timer done'); }, 1000); ``` 匿名函数在JavaScript中的使用不仅有助于提高...

      delphi函数查询

      Lambda表达式是匿名函数的一种形式,如:`var Sum := function(a, b: Integer): Integer { return a + b; };` 7. **递归函数** - 递归函数是调用自己的函数,通常用于解决分治问题或数据结构遍历,如计算阶乘或树...

      PHP函数实验报告

      它是一个没有名字的函数,常用于回调函数或需要短暂使用的简单功能: ```php $add = function($x, $y) { return $x + $y; }; echo $add(3, 4); // 输出 7 ``` 七、递归函数 递归函数是一种调用自身的函数,通常...

      node.js实现回调的方法示例

      在Node.js中,回调函数是一种处理异步操作的重要机制,因为JavaScript是单线程的,不能同时执行多个任务。回调函数使得程序能够非阻塞地处理I/O操作和其他耗时任务。 首先,我们来看如何向回调函数传递额外的参数。...

      1函数的初步.zip

      9. **匿名函数**:也叫lambda函数,它是一种没有名字的函数,通常用于一次性、简单的任务,可以在不需要为函数命名的情况下快速定义一个函数。 10. **函数式编程**:这是一种编程范式,强调使用函数来构建程序,...

      js代码-每调用一次返回函数当前被调用的次数

      在这个例子中,`counter`函数返回一个内部定义的匿名函数,这个匿名函数可以访问`counter`函数的作用域,包括`count`变量。因此,每次调用`myCounter()`时,`count`都会增加,记录了函数被调用的次数。 另一个相关...

      有用 delphi函数

      这在处理回调或高阶函数时非常有用。 8. **递归函数** 递归函数是调用自身的函数,常用于解决需要反复进行相同操作的问题,如计算阶乘或遍历树形结构。 9. **重载函数** Delphi允许函数重载,即同一个函数名可以...

      javascript函数大全

      - **函数表达式**(Function Expression):如`var myFunction = function() {}`或匿名函数`var myFunction = function() {}`。函数表达式不会被提升,且可以用于立即调用。 2. 参数: - **形参(Formal ...

    Global site tag (gtag.js) - Google Analytics