第一种:传统方式
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>
网友评论