一、关于函数的写法及调用
(1),JavaScript函数定义在一些地方是不同于C++,.NET,JAVA等面向对象语言的,这些语言都有函数重载的概念。如:
Code
上面的函数sum实现的是整数的相加,调用时根据输入参数的不同决定其调用的是哪个函数。
但是在JavaScript中函数却不能这样写重载函数,这这会引起混乱。如:
Code
按照我们的习惯思维,当show函数中不参入参数时,应该调用的是第一个函数,弹出的警告框应该是“good”,但是运行后我们就会发现警告框的内容是“NaN”,这里系统调用的是最后一个函数,即show(s,w);当调用show('yes')时,它弹出的不是"yes",而是"yesundefined",这里系统调用的也是最后一个函数,即show(s,w);当调用show('yes','no')时,弹出的是"yesno",这里系统调用的还是最后一个函数,即show(s,w);当调用show('yes','no','cancel'),结果同show('yes','no')。说明后面的函数会覆盖前面的同名函数。至于为什么会产生这种结果,请接着往下看下面一段话,你就会明白了。。。。
由于函数被覆盖了,show函数定义为最后一个函数。。。而在JavaScript中,如果在函数调用时省略了参数(如show(),show('yes')),则省略的参数(s,w和w)会以undefined类型传递。如果在调用时提供了函数声明所不需要的多余参数(如show('yes','no','cancel')),多余的参数('cancel')会被忽略。。。
(2),特殊情况
请看下面函数的运行 结果。
Code
当我们调用show("伟大的","中华人民","*")时,会弹出“伟大的*”。按照上面的思路,里面的参数应该是被JavaScript解释器忽略掉的,但是这里不会,因为我们在写处理函数的时候已经做了参数处理,arguments为传入函数的参数数组。
二、函数声明的放置位置
函数有两个个存放位置
1,直接放置在js文件的最顶层 2,放置在一个对象中
(1),直接放置在js文件中非常之简单也非常常见,调用也十分清晰。
//
声明
function show()
{
alert( " 成功 " );
}
// 调用
show();
function show()
{
alert( " 成功 " );
}
// 调用
show();
(2),在对象中写函数其实也非常常见。由于对象分三种(1,内置对象 2,JSON对象 3,自定义对象),所以这里也分三种情况讨论。
(a) ,内置对象中的函数
//
定义
String.prototype.trim = function ()
{
return this .replace( / (^\s*)|(\s*$) / g, "" );
}
// 调用
var str = " 我的左右边都有空格 " ;
alert(str.trim());
String.prototype.trim = function ()
{
return this .replace( / (^\s*)|(\s*$) / g, "" );
}
// 调用
var str = " 我的左右边都有空格 " ;
alert(str.trim());
(b)JSON对象中的函数
//
定义JSON对象obj中的show方法
var obj = {
show: function (){
alert( " 成功 " );
}
}
// 调用
obj.show();
var obj = {
show: function (){
alert( " 成功 " );
}
}
// 调用
obj.show();
(c),自定义对象中的函数,这是JavaScript开发者应用函数最为常见的地方
//
定义自定义对象obj中的show函数
function obj()
{
this .show = function ()
{
alert( " 成功 " );
}
}
// 调用
var aaa = new obj();
aaa.show();
function obj()
{
this .show = function ()
{
alert( " 成功 " );
}
}
// 调用
var aaa = new obj();
aaa.show();