js的函数的深度分析

<%@ 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 'js10.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">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

<script type="text/javascript">
//在javscript中function(函数)本身就是一个对象
function add(number)
{
alert(number + 10);
}
//上序函数等价于var add = function(number)
//{
//alert(number + 10);
//}
//左边的add是一个指向右边对象的一个引用(function(函数)本身就是一个对象)



/*function add(number, number1)
{
alert(number + 20);
alert(number);
alert(number1);
}*/
//上序函数等价于var add = function(number, number1)
//{
//alert(number + 10);
//}
//左边的add是一个指向右边对象的一个引用(function(函数)本身就是一个对象)

//add(10);//运算的结果是30,而不是20
//add(10,20,30);
//为什么不是20呢?
//首先add是指向一个只含有一个参数的functioin对象,但是后来指向了有两个参数的function对象,因此调用add(10)会调用后面一个函数:注意:调用的函数中的参数的个数可以少于函数中定义参数的个数
//也可以add(10,20,30)结果将会使30,也允许多于函数定义中参数的个数的调用。
//结论:在javascript没有函数的重载
//在javascript中有一种Function对象 ,我们所有自己定义的函数都是Function类型的。
//在javascript中有一种数据类型Undefined 有一个值就是undefined


//函数原理的解释
/* 所有的function都是对象,function 是Function类型的一个引用。
例如:var add = function(number)
{
alert("我爱你");
}
实际上可以解析就是: var add = Function("number","alert('我爱你');");
Function中参数的个数比function的参数个数多一个,多出的最后一个参数用来执行function中的函数体的部分,前面的参数才是函数需要真正接受的参数,
Function中的参数必须都是字符窜类型的。
*/


//例如
//var add = Function("number","number1","document.write(10+number);alert(number+number1)");
//add(10,20,30);

//每个函数都存在一个隐士的arguments对象(相当于一个接受参数的数组),它的实际长度就是实际定义时参数的个数,而与定义go()这个函数的时候有几个参数传进来无关
function go(number, number1, number2)
{
//alert(arguments[0]);
//alert(arguments[1]);
//alert(arguments[2]);
//alert(arguments[3]);
}
go(1,2,3);
//虽然在javascript中没有函数的重载,但是可以模拟
function go2()
{
if(arguments.length == 1)
{
alert(arguments[0]);
}else if(arguments.length == 2)
{
alert(arguments[0] + arguments[1]);
}else
{
alert(arguments[0] + arguments[1] + arguments[2]);
}

}
go2(1);
go2(1, 2);
go2(1, 2, 3);
//定义函数的三种形式
1、function go(){}
2、var go = function(){}
3、function go(){} 调用时用 document.getElementsById("id").onclick = go;//此处千万不能打括号
</scrip
</head>

<body>

</body>
</html>

你可能感兴趣的:(js)