什么是函数?
函数是一种数据类型,可以理解为一个存放代码段的容器。函数分为定义和使用两个阶段,根据定义形式可分为声明式函数和赋值式函数两种,将代码块放进函数的过程称为函数的封装。封装完毕的函数并不会立即执行,只有被声明的时候才会执行函数内的代码,即为函数的调用。
一、函数的定义
1.声明式函数
语法:function 变量名(参数){代码段}
理解:声明式函数的是直接利用function关键字来定义的,在JavaScript中会先进行预解析,将函数提升到函数执行发生之前,因此,声明式函数可以在定义前就进行声明调用。
2.赋值式函数
变量=function 函数名(){代码段}
理解:将定义后的函数直接赋予变量的函数称为赋值式函数。赋值式函数不会进行预解析,在定义前调用赋值式函数会报错,赋值完毕之后函数名失效,不能通过调用函数名的形式来进行声明调用。如果将函数名省略,则将此类函数称为匿名函数,用小括号将匿名函数包裹起来,再后面在加个小括号,则称为自调用函数。
二、函数的调用
1.语法:函数名+(参数)
函数名+小括号便可以调用已定义的函数,小括号中的实参需要与函数的形参一一对应。
2.注意事项:对于声明式函数,因为预解析的缘故,可以在函数定义之前便进行调用
三、函数的参数
函数的参数分为形参和实参两种,形参是指函数定义时放在小括号中变量名,而实参则是函数调用时赋予的实际值,实参和形参一一对应。
四、函数的返回值
函数的的返回值即是我们希望函数执行完毕返回的结果,使用return关键字来返回,当函数解析到return关键字时,无论是否仍有代码未执行,函数都将结束运行。
五、预解析
JavaScript在执行发生前,会先进行预解析,预解析会将变量以及声明式函数的定义提升至顶部,再从上至下依次进行,通过以下案列了解与解析的过程。
案例1
console.log(a)//undifined
var a=10;
/*分析:代码执行之前,先将 var a提升至顶部,预解析结束,按顺序执行代码
,输出a的值,此时的a只是定义了,还未赋值,所以是undifined。再执行a=10*/
案例2
a() //hello word
function a(){
console.log('hello word')
}
b()//报错,b is no a function
var b=function(){
console.log('javascript')
}
/*分析;a是声明式函数,会进行预解析,b是赋值式函数,不预解析
代码的执行顺是:
function a(){
console.log(''hello word)
}
a() b()报错,停止运行
案例3
var a=10;
console.log(a)//10
function a(){
console.log('hello word')
}
a()//报错,a is not a function
/*预解析:
var a
function a(){
console.log('hello word')
}
a=10 10将函数语句替换掉
console.log(a)//10
a() 报错 a不是函数了