第四章 javascript函数
一.函数定义
javascript定义函数主要有3种方式:命名函数、匿名函数、使用function构造匿名函数
1.命名函数
<script> function 函数名(参数列表) { 执行语句块! } </script>
2.匿名函数
<script> function (参数列表) { 执行语句块! } </script> <script> //用花括号括起来就表示声明,注意声明函数是不会立即执行的,必须根据你的调用,用花括号的形式不需要基于函数名 (function(name,age){ document.write(name+':'+age); })('lcl',18); </script>
3.使用function类构造匿名函数
<script> new Function(参数列表,函数执行体); </script> <script> var a=new Function('name','age','alert(name+age);'); a('lcl','20'); </script>
4.函数声明与函数表达式的区别
<script> //我们把简单的命名一个函数就是函数的声明 //例如:以下是声明一个test()函数 document.write(text()); function text() { return 1; } //而以下是函数表达式 document.write(num); var num=function () { return 2; } document.write(num()); //注意num和num()返回的区别 //函数声明和函数表达式的区别:函数声明不在乎函数上下执行顺序 //而函数表达式在乎 </script>
二.函数的返回值return
javascript中的函数没有声明返回类型,当函数想要返回值的时候.直接在函数后面加return语句即可,假如不添加就表明该函数没有任何的返回值。
<script> function count(){ var a=3; // a=a++; //3 a=++a; //4 return a; } document.write(count()); function test() { return 1; } alert(test());//打印1 document.write(test());//页面输出1 console.log(test());//控制台1 </script>
三.函数中的内置对象arguments
<script> //***************测试arguments function test(a,b) { console.log(arguments); } test(1,2); //此时点击console,就可以看到arguments //arguments是只看实参的一个对象,这里要注意一下,是实参,不是形参 //arguments[0]===》1 arguments[1]===>2 </script>
四.变量与函数
根据变量的定义范围不同,变量有:全局变量和局部变量。直接定义的变量成为全局变量,在函数中定义的变量称为局部变量。局部变量只能在函数内有效,如果全局变量和局部变量使用相同的变量名,则局部变量将覆盖全局变量。
与局部变量对应的就是局部函数,局部函数是在函数中定义的,外部函数可以直接调用其内部的函数,不是外部函数不可以调用其内部函数,所以只有当外部函数被调用时,内部函数才会被执行。外部函数也不能访问其内部函数声明的内部局部变量。
//******************全局变量与局部变量 <script> var a=3; //全局变量 function count() { var b=5;//局部变量 window.b=5;//全局变量 return b; } document.write(a); document.write(b); </script> //返回3
//*************变量名相同,局部变量会覆盖全局变量 <script> var a=3; //全局变量 function count() { var a=4;//局部变量 document.write(a); } count(); </script> //返回4
//***************全局变量全局访问 <script> var b=3; //全局变量 function count() { var a=4;//局部变量 var c=a+b; document.write(c); } count(); </script> //返回7
//******************外部函数能调用其内部函数 <script> function count() { var a=4; function add() { var b=5; document.write(a+b); } document.write(b); add(); } count(); </script>//返回9闭包函数:有权访问另一个函数作用域中的变量的函数。
当函数被返回的时候,函数中的局部变量就会被释放,但闭包使得了即使被释放的局部变量也能够被访问。
<script> function bibao() { var a=3; function bb() { document.write(a); } return bb(); } bibao(); </script>
五.函数调用
1.直接调用函数:对象.函数名
//当声明一个函数没有指明分配给哪个对象使用的时候,默认分配给的是window对象。
<script> function dev() { var a=2; a=a--; //document.write(a); return a; } //dev(); //window.dev(); var f=dev(); alert(f); </script>
2.call方法:函数.call(调用者,参数1,参数2…)
<script> function dev(a,b) { a=a+(b++); document.write(a+'<br>'+b); } dev.call(window,3,4); </script>
3.apply方法:函数.apply(调用者.arguments)
//arguments相当于是数组,用来存放多个参数。和call调用方式类似。
<script> function dev(a,b) { a=a+(b++); document.write(a+'<br>'+b); } dev.apply(window,[2,7]); </script>
例子:传一组数组数据,又传遍历数组的函数
<script> function show(arry,fun) { fun.call(window,arry); fun.apply(window,[arry]); } show([4,5,6],function (arry) { for(i in arry){ document.write(i+'.'); document.write(arry[i]+'\n'); } }); </script>