第一種:傳統方式
function 函數名(){···}
通常我們聲明函數規則為先聲明后調用,但是js中這種聲明方式有預加載功能,允許我們先調用函數,再聲明函數。
<script type="text/javascript">
getInfo();
function getInfo(){
console.log('hello world');
}
</script>
注意:
預加載:代碼先自動把函數的聲明放入內存。從代碼書寫順序上看起來是先調用后聲明,本質上其實還是先聲明后調用。
先調用后加載條件:1.必須是傳統的聲明方式。2.調用和聲明必須存在于一個<script>標簽內。
第二種:變量賦值方式
var 函數名 = function(){···}
該方式沒有預加載功能,必須先聲明后調用。
<script type="text/javascript">
var f= function (){
console.log('hello world');
}
f();
</script>
函數參數注意事項
- 在PHP中,實參個數不允許小于實參,但在js中,實參與形參沒有嚴格對應關系
<script type="text/javascript">
function f1(name,age,addr){
console.log('名字:'+name+'年齡:'+age+'地址:'+addr);
}
f1('kang','18','china');
f1('kang','18');
f1('kang');
</script>
執行結果
arguments
js中的函數形參在不聲明的情況下也可以將實參傳入函數之內,這時我們就需要arguments關鍵字。
實參在函數中以arguments數組的形式存在:
<script type="text/javascript">
function f1(){
console.log('名字:'+arguments[0]+'年齡:'+arguments[1]+'地址:'+arguments[2]);
}
f1('kang','18','china');
</script>
提示:
可以通過arguments.length獲取arguments數組的數量,從而根據數量執行不同的代碼,這從側面上實現了JAVA中多態或者重載的效果。
callee
在函數內部要調用本函數的使用callee關鍵字。類似遞歸的效果。使用callee函數的優勢在于降低代碼耦合度。
<script type="text/javascript">
/*
* 請n的階乘
*/
function f1(n){
if(n==1){
return 1;
}else{
return n*arguments.callee(n-1);
}
}
console.log(f1(5));
</script>
函數可以嵌套函數
<script type="text/javascript">
function f1(){
function f2(){
console.log("I am f2");
}
return f2;
}
var ff = f1();
ff();
</script>
執行結果:I am f2
匿名函數自調用方法
<script type="text/javascript">
(function(addr){
console.log(addr);
})('北京');
</script>