javascript 回调函数

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript">
	// 当你送亲戚或朋友回家,送到火车站你一般会说,你到家之后,打个电话给我报下平安;
	// 可以把这个打电话报平安动作看做是回调函数;
	// A callback is a function that is passed as an argument to another function
	// and is executed after its parent function has completed;
	
	// 函数a 有一个参数,这个参数就是函数b, 当函数a 执行完成之后执行函数b, 那么这个过程就叫回调;
	// 这里必须强调一点: 函数b 是以参数形式传递给函数a 的,那么函数b 被调用的时候就叫回调函数;
	// http://www.cnblogs.com/sharpxiajun/p/4148932.html
	
	function parentFunc(callback)
	{
	  alert("稍等,等父函数准备就绪....执行完成");
	  callback();
	}
	
	function childFunc1()
	{
	  alert("子函数1;作为回调函数1");
	}
	
    function childFunc2()
	{
	  alert("子函数2;作为回调函数2");
	}
	
	parentFunc(childFunc1);
	parentFunc(childFunc2);

	// <[回调函数就是一个通过函数指针调用的函数,如果你把函数的指针(地址)作为参数传递给另一个函数;
	//  当这个指针被用为调用它所指向的函数时,我们就说这是回调函数,回调函数不是由该函数的实现方法直接调用
	// 而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应;]>
	// 函数也是对象:
	// 想弄明白回调函数,首先得清楚明白函数的规则,在javascript 中,函数是比较奇怪的,但是它确确实实是对象
	// 确切地说函数是用Function() 构造函数创建的 Function 对象,Function 对象包含一个字符串,字符串是
	// 包含函数体 的javascript 代码,javascript,数据和代码之间的区别是很模糊的;
	//可以这样创建函数 
	var fn = new Function("arg1", "arg2", "return arg1 * arg2;"); 
	fn(2, 3); //6
	
	function fn(arg1, arg2, callback)
	{
       var num = Math.ceil(Math.random() * (arg1 - arg2) + arg2);
       callback(num);  //传递结果
    }
 
	fn(10, 20, function(num){alert("Callback called! Num: " + num);});
	
	function foo() {
	var a = 10;
		return function()
		{
		   a *= 2;
		   return a;
		}
	}
	// 函数在外部调用,依然可以访问变量a,这都是因为javascript中的作用域是词法性的,
	// 函数式运行在定义它们的作用域中[foo内部的作用域],而不是运行在此函数的作用域中,只要被定义在foo中,
	// 它就可以访问foo中定义的所有的变量,即便是foo的执行已经结束,因为它的作用域会被保存下来,但是也只有
	// 返回的那个函数才可以访问这个保存下来的作用域,返回一个内嵌匿名函数是创建闭包最常用的手段;
	// http://www.tuicool.com/articles/UZNNj2
	var f = foo();
	alert(f()); // return20
	alert(f()); // return40
	alert(f()); // return80
	
	// 另外,最好保证回调存在且必须是函数引用或者函数表达式:
    // (callback && typeof(callback) === "function") && callback();
    
	</script>
  </head>
  <body>
  </body>
</html>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值