什么是函数:
函数是一组封装了特定功能的代码块,可以随时随地的运行的语句。
函数由关键字function,函数名,参数,函数体和返回值构成。
函数的声明:
函数声明使用关键字function + 函数名称。
以下是一个函数的完整样例
eg: function showName(name){
var result = name +"hello";
return result;
}
关键字function ,函数名showName,参数name,
执行体 var result = name +"hello";
返回值:return result;
函数的调用:
函数的使用直接函数名加括号来调用函数。有参数传入参数。
eg: showName('JavaScript');
我们执行
alert(showName('JavaScript'));输出JavaScript hello
函数的返回值:
函数的返回值是可有可无的,也就是说可以有return也可以无return.
但是没有return语句的函数,ECMASCript会自动返回undefined。
eg: function showName(name){
var result = name +"hello";
}
alert(showName('JavaScript'));//undefined
函数的arguments对象
arguments是函数的特殊对象。它代表参数对象。使得编码无需指出参数名
就可以访问参数。
eg:
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
window.onload= function(){
var oText1 = document.getElementById('text1');
var oText2 = document.getElementById('text2');
var oBtn1 = document.getElementById('btn1');
oBtn1.onclick = add(1,2); //调用函数add传递参数1,2
}
function add(a,b){
alert(a);//接受参数1
alert(b);//接受参数2
alert(arguments.length);//不使用参数名a,b,使用arguments对象
alert(arguments[0]);//等价于a,1
alert(arguments[1]);//等价于b,2
}
</script>
</head>
<body>
<input type="text" name="text1" id="text1" value=""/>
<input type="text" name="text2" id="text2" />
<input type="button" id="btn1" value="相加" />
</body>
</html>
如此看来arguments对象和参数名功能一致,那arguments不是多此一举吗?
事实上,arguments对象的作用在于不定参。有些函数参数传递个数不固定,
这是就无法使用参数名,a,b这样的形式。
示例如下,多个数相加,但是具体几个数字不固定,此时用arguments最好。
eg:
<script>
function result(){
var result = 0;
for(var i = 0 ;i<arguments.length;i++){
result+=arguments[i];
}
alert(result);
}
result(1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9);
</script>
调用参数时即使传递参数个数不固定,函数result也能很好地执行。
如果采用固定参数名 function result(num1,num2,num3……),
是无法办到的。
函数分为内建函数和自定义函数
上文中所写的函数都为我们自己写的函数称为自定义函数,在js里还有大量的
内建函数,即js定义的函数,如,String对象的 toString(),subString()
array.sort()等等,我们已经见过很多
全局函数和局部函数
全局函数定义在<script>标定里,在签里都可以使用。
局部函数定义在函数内部,只能在其外部函数里使用。
eg:
<script>
function show(name){
function say(){
alert('say hello');
}
say();
alert(name);
}
show('js');
</script>
对于函数show就是全局函数,对于函数say就是局部函数
匿名函数:所谓的匿名函数就是没有名字的函数,除此以外和普通的函数一样。
eg:
<script>
window.onload = function(){//匿名函数
function aaa(){//局部普通函数
alert('aaa');
}
var btn = document.getElementById('btn1');
btn.onclick = function(){//局部匿名函数
alert('btn click');
}
aaa();//局部函数只能在其嵌套的函数里用
bbb();//全局函数在哪里访问都可以
}
function bbb(){//全局普通函数
alert('bbb');
}
var test = function(){//全局匿名函数
alert('test');
}
test();//全局函数在哪里访问都可以
</script>
函数闭包
闭包,指的是词法表示包括不被计算的变量的函数,
也就是说,函数可以使用函数之外定义的变量。
简单闭包
再函数里使用全局变量
<script>
var a = 'hello';
function aaa(){
var result = a;
alert(result);
}
aaa();
</script>
复杂闭包:
在函数里使用另一个函数,内部函数是一个闭包。
内部函数没有用参数接受变量,直接使用父函数的变量。
<script>
var num = 2;
function bbb(){
var bnum = 1;
function ccc(){
alert(bnum+num);//3
}
return ccc();
}
bbb();
</script>
总结:闭包就是函数里能用函数外的值
——总结——
限于文章篇幅原因,这里仅仅介绍冰山一角。由于笔者的水平有限,编写时间也很仓促,
文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正