函数使用
什么是函数
有一定功能代码体的集合。
函数的封装
传统方式
function函数名(){}
该方式声明的函数的有预加载的过程,可以先调用在,再声明函数。
预加载:代码先把函数的声明放入内存,本质上是先声明再调用。
函数先调用,后声明的条件是,全部的代码在一个“<script>”标记里面
<script type="text/javascript"> getInfo(); function getInfo(){ console.log("hello"); } </script> |
变量使用(匿名函数)
var 函数名=function(){}该方式不具备预加载,必须先声明,再使用
<script type="text/javascript"> function getInfo(){ console.log("hello"); } getInfo(); </script> |
函数实参形参关系
JavaScript里面实参和形参没有实际上的对应关系
<script type="text/javascript"> function f1(name,age,add="BeiJing"){ console.log("个人信息:"+name+age+add); } f1("Summer","12","ShangHai"); f1("Summer"); f1(); </script> |
关键字arguments
利用arguments可以接受参数在函数中传递的信息,实现重载的效果
<script type="text/javascript"> function f1(){ var len=arguments.length; if(len==0){ console.log("个人信息"); } else if(len==1){ console.log("个人信息:name="+arguments[0]); } else if(len==2){ console.log("个人信息:name="+arguments[0]+";age="+arguments[1]); } } f1(); f1("Spring"); f1("Summer","12"); </script> |
callee关键字
定义:在函数的内部使用,代表当前函数的引用;
function f1(){
xxxx具体执行代码
arguments.callee(); //调用本函数(或者f1())
//都可以使得本函数执行,我们选择callee,其可以降低代码的耦合度。
xxxx执行代码
}
f1();
耦合:一处代码的修改会导致其他代码也要发生改变。
在程序项目里边要开发低耦合度的代码。
<script type="text/javascript"> //求5的阶乘 function jiecheng(n){ if(n==1){ return 1; }else{ return n*arguments.callee(n-1); } } console.log(jiecheng(3)); console.log(jiecheng(5)); //这里函数的名改变时,可以明显体会到callee可以降低代码的耦合度 var jc=jiecheng; jiecheng=null;//这里销毁jiecheng避免后面使用 console.log(jc(4)); </script> |
函数的返回值
一个函数执行完毕需要返回具体的信息,使用return关键字返回信息。
在一定层度上看,全部的数据类型(数值、字符串、布尔、对象、null)信息都可以返回
return本身还可以结束函数的执行。
在函数内部返回一个函数出来。
在javascript里边,一切都是对象
在一个函数内部,可以声明数值、字符串、布尔、对象等局部变量信息,言外之意就还可以声明函数(函数内部还要嵌套函数),因为函数是对象,并且函数可以被return给返回出来。
<script type="text/javascript"> //求5的阶乘 function f1(n){ var name="tom"; var age=13; var iseat=false; function f2(){ console.log("I am f2 function"); } return f2;//这里返回函数内部的嵌套函数 } var ff=f1();//f1()函数执行完毕的返回值被ff接受 ff(); </script> |
函数的调用
传统方式调用
f1()
匿名函数自调用
(function(){})();
<script type="text/javascript"> var f1=function(){ console.log("spring"); } //var f1="Tom";//覆盖上面的函数 f1(); //匿名函数自调用的好处:本身不会被同名变量覆盖 (function(){ console.log("summer"); })(); (function(add){ console.log("地址:"+add); })("上海"); </script> |