1、在Javascript中,函数(function)就是对象,在JavaScript中没有方法(函数)重载的概念。
看下面的例子:
<html>
<head>
<script type="text/javascript">
function add(number)
{
alert(number + 20);
}
function add(number,number1)
{
alert(number + 30);
}
add(10);
</script>
</head>
<body>
</body>
</html>
运行结果为弹出一个窗口,显示40,如果我们将两个函数位置调到,如下:
<html>
<head>
<script type="text/javascript">
function add(number,number1)
{
alert(number + 30);
}
function add(number)
{
alert(number + 20);
}
add(10);
</script>
</head>
<body>
</body>
</html>
结果为30,谁写在后面谁起作用了,是不是后面的覆盖了前面的???,当然不是。
在Javascript中,函数(function)就是对象,在JavaScript中没有方法(函数)重载的概念。
对于上面的函数,等价于如下:
<html>
<head>
<script type="text/javascript">
function add(number)
{
alert(number + 20);
}
var add = function(number)
{
alert(number + 20);
}
function add(number,number1)
{
alert(number + 30);
}
var add = function(number,number1)
{
alert(number + 30);
}
add(10);
</script>
</head>
<body>
</body>
</html>
add相当于一个引用变量,开始指向function(number)对象,然后右指向function(number,number1),function(number)此后将在无法访问到了,内存图如下:
在很多js框架中,函数的定义一般使用var add = function(){ }的形式
2、程序如下:
<html>
<head>
<script type="text/javascript">
function add(number)
{
alert(number + 20);
}
add(10,20);
</script>
</head>
<body>
</body>
</html>
结果还是30,并且无错误提示,javascript函数对于参数来说多了就舍弃,少了,少了的参数就是Undefined类型参数,对参数数量没有严格要求
<html>
<head>
<script type="text/javascript">
function add(number)
{
alert(number + 20);
}
/*
var add = function(number)
{
alert(number + 20);
}
*/
function add(number,number1)
{
alert(number);
alert(number1);
}
/*
var add = function(number,number1)
{
alert(number + 30);
}
*/
add(10,20);
add(10);
</script>
</head>
<body>
</body>
</html>
上述程序,add(10,20)显示两个警告窗口,分别是10,20,add(10)也显示两个警告窗口,分别是10和undefined,undefined是Undefined类型的
3、在JavaScript中有一个Function对象,所有自定义的函数都是Function对象类型的。
使用Function定义函数:
<html>
<head>
<script type="text/javascript">
var add = new Function("number","alert(number + 20);");
add(20);
</script>
</head>
<body>
</body>
</html>
new Function()中的参数,前面几个是正常的参数,最后一个是函数体的内容
<html>
<head>
<script type="text/javascript">
var add = new Function("number","alert(number + 20);");
add(20);
var add2 = new Function("number","number1","alert(number + number1);");
add2(10,20);
</script>
</head>
<body>
</body>
</html>
add和add2相当于:
function add(number)
{
alert(number +20);
}
function add2(number,number1)
{
alert(number + number1);
}
Function对象接收的所有参数都是字符串类型的,其中最后一个参数就是要执行的函数体,而前面的参数则是函数真正需要接收的参数。
4、在JavaScript中,每个函数都有一个隐含的对象arguments,表示给函数实际传递的参数。arguments有一个属性length表示实际传递参数的个数。
<html>
<head>
<script type="text/javascript">
function add(number1,number2)
{
alert("实际参数个数:" + arguments.length);
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
add(2,3,4);
</script>
</head>
<body>
</body>
</html>
定义的add函数接收两个参数,实际调用时传递了3个,使用arguments对象可以打印出全部传递过来的参数。,结果显示为
实际参数个数:3 然后是2 、3 、4
模拟函数重载的例子:
<html>
<head>
<script type="text/javascript">
function add(number1,number2)
{
alert(arguments.length);
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
//add(2,3,4);
function add2()
{
if(1 == arguments.length)
{
alert(arguments[0]);
}
else if(2 == arguments.length)
{
alert(arguments[0] + arguments[1]);
}
else if(3 == arguments.length)
{
alert(arguments[0] + arguments[1] + arguments[2]);
}
}
add2(3);
add2(3,4);
add2(3,4,5);
</script>
</head>
<body>
</body>
</html>
5、