zoukankan      html  css  js  c++  java
  • (11)JavaScript学习笔记 函数 java程序员

    一、定义

    function print(msg)
    {
    	document.write(msg,"<br>");
    }
    
    function distance(x1,y1,x2,y2)
    {
    	var dx=x2-x1;
    	var dy=y2-y1;
    	return Math.sgrt(dx*dx+dy*dy);
    }
    
    function factorial(x)
    {
    	if(x<=1)
    		return 1;
    	return x*factorial(x-1);
    }
    
    //调用
    print("Hello"+name);
    print("Welcome to my blog");
    total_dist=distance(0,0,2,1)+distance(2,1,3,5);
    print("The probability of that is:"+factorial(5)/factorial(13));
    
    //嵌套的函数
    function hypotenuse(a,b)
    {
    	function square(x)
    		{
    			return x*x;
    		}
    	return Math.sqrt(square(a)+square(b));
    }

    二、可变长度的参数列表:Arguments 对象
    //使用arguments 来验证调用函数时是否使用了正确数目的实际参数
    function f(x,y,z)
    {
    	if(arguments.length!=3)
    	{
    		throw new Error("functon f called with "+arguments.length+"arguments,but it expects 3 arguments.");
    	}
    }
    
    //arguments 可以编写函数使之能够使用任意数目的实际参数
    function max(/*...*/)
    {
    	var m=Number,NEGATIVE_INFINITY;
    	for(var i=0;i<arguments.length;i++)
    	{
    		if(arguments[i]>m) m=arguments[i];
    	return m;
    	}
    }
    
    var largest=max(1,10,100,2,3,1000,4,5,10000,6);
    //这样的能够接受任意数目的参数被称作可变参数函数
    
    //callee属性,用来引用当前正在执行的函数,可以用来允许对未命名的函数递归地调用自身
    function(x)
    {
    	if(x<=1) return 1;
    	return x*arguments.callee(x-1);
    }

    三、把对象属性用作参数
    为了方便调用,使用下面的方法可以允许参数按照任意顺序以名字/值对的方式来传递

    function arraycopy(/*array*/from,/*index*/from_start,/*array*/to,/*index*/to_strart,/*integer*/length)
    {
    	//code goes here
    }
    function easycopy(args)
    {
    	arraycopy(
    			args.from,
    			args.from_start||0,
    			args.to,
    			args.to_start||0,
    			args.length;);
    }
    var a=[1,2,3,4];
    var b=new Array(4);
    easycopy(from:a,to:b,length:4);

    四、参数类型
    //验证参数类型的函数,如果不能通过则中断执行
    function sum(a)
    {
    	if((a instanseof Array||
    		(a&&typeof a=="object"&&"length" in a))
    		{
    			var total=0;
    			for(var i=0;i<a.length;i++)
    			{
    				var element=a[i];
    				if(!element)continue;
    				if(typeof element=="number") total+=element;
    				else throw new Error("sum():all array elements must be numbers");
    			}
    			return total;
    		}
    		else throw new Error("sum():argument must be an array");
    }
    
    //以下函数可以接受任意多个参数,递归处理所有的数组类型的参数,在抛出一个错误之前,尽最大努力地把非数字值转换为数字
    function flexisum(a)
    {
    	var total=0;
    	for(var i=0;i<arguments.length;i++)
    	{
    		var element=arguments[i];
    		if(!element) continue;
    		var n;
    		swith(typeof element)
    		{
    		case"number":
    			n=element;
    			break;
    		case"object":
    			if(element instanceof Array)
    				n=flexisum.apply(this,element);
    			else n=element.valueof();
    			break;
    		case "function":
    			n=element();
    			break;
    		case"string":
    			n=parseFloat(element);
    			break;
    		case"boolean":
    			n=NaN;
    			break;
    		}
    		else throw new Error("sum():can't convert "+element+" to number");
    	}
    	return total;
    }



  • 相关阅读:
    Oracle数据库-建库、建表空间,建用户
    创建oracle数据库的表空间、用户、目录、导入导出文件等信息
    使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处
    DataSet用法详细
    DataSet和DataTable详解
    经典SQL语句集锦
    JS脚本验证大全
    用Unity写一个12306验证器的恶搞图生成软件
    SQL Server中 sysobjects、syscolumns、systypes
    如何在oracle中导入导出(备份&恢复)dmp数据库文件
  • 原文地址:https://www.cnblogs.com/java20130725/p/3215418.html
Copyright © 2011-2022 走看看