一、函数:就是可以重复执行的代码块
1
、定义一个函数
(
1
)函数声明(自定义声明):这种定义方法最强大,定义完毕后在哪里使用都可以,没有位置限制
function
函数名
(){
方法体
}
(
2
)函数表达式
Var myFun = function(){
方法体
}
2
、函数的调用:函数名
()
;
(
1
)创建函数之后一定要调用才会执行函数(也就是说函数如果不被调用,它自己不会执行)
(
2
)预解析:也就是说调用函数的时候不分前后顺序,调用语句写在哪里都可以访问到相应的函数
3
、函数名
(
1
)函数名
==
整个函数
<1>
打印函数名(就是不带括号)就相当于打印整个函数
<2>
打印执行函数(就是带括号)就等于打印函数的返回值
(
2
)如果函数名相同,后面的函数会覆盖前面的函数(所以函数名千万不要取一样的)
(
3
)函数中包函数,先执行里面,后执行外面
4
、函数的加载问题:
js
加载的时候只加载函数名不加载函数体。所以如果想使用内部的成员变量就一定要调用函数
二、函数的组成
1
、参数:参与运算的变量(设置参数可以解决修改值但不修改规则这个问题)
(
1
)形参:形式上参与运算的值,没有实际值,作用是为实参占位置,就像一个躯壳一样(可以理解为函数的内部变量外部无法访问)
(
2
)实参:实际上参与运算的值
注意:形参个数和实参个数匹配的问题(一般情况下我们不会让形参和实参不匹配)
<1>
相等
à
正常执行
<2>
实参个数
>
形参个数
à
正常执行(多余的实参函数不使用)
<3>
实参个数
<
形参个数
à
要看你的程序是否报错
<4>
未给定实参的形参为
undefined
(
3
)参数相当于局部变量
(
4
)就近原则使用变量
(
5
)两个平级的函数中的变量不会相互影响(可以使用同样的形参名)
2
、返回值:函数程序运行后的结果外部需要使用的时候,我们不能直接给予,需要通过
return
返回(执行完毕函数以后,我们能给其他变量赋值)
(
1
)总结:函数内部,
return
后面的值就是返回值
(
2
)作用:函数执行后剩下结果就是返回值
(
3
)函数执行完毕的时候会不会留下点什么取决于有没有返回值
注意:
<1>
如果函数没有显式的使用
return
语句,那么函数有默认的返回值
undefined
<2>
如果函数使用
return
语句,那么跟在
return
后面的值就成为函数的返回值
<3>
如果函数使用
return
语句,但是
return
后面没有任何值,那么函数的返回值也是
undefined
<4>
函数使用
return
语句后,这个函数会在执行完
return
语句之后停止并立即退出,也就是说
return
后面的所有其他代码都不会再执行
(
4
)返回值的作用:一般来说,函数通过运算出来的数都是半成品,需要二次加工,所以我们不能结束,需要在函数外部二次加工
<1>
函数的返回值必须要执行函数才能得到
3
、功能
(
1
)注意
js
中没有方法重载
三、函数是一种类型:
function
类型
四、函数递归
(
函数自己调用自己
)
1
、递归是一种思想,类似于计数器,开闭原则
2
、实质就是函数自己调用自己
3
、必须要有跳出条件,否则就是死循环
五、回调函数:函数作为参数进行传递和使用(函数调用别的函数)
1
、
function fn(){
}
fn()
;
和
(function fn(){})()
;效果是一样的,都是执行函数
2
、什么情况下使用回调函数:回调函数一般是用于定义一个规则来使用的(也就是说一个函数里面要用一个规则,但是这个规则又用另外一个函数来传递)
(
1
)规则的传递只能通过函数实现,通过变量无法达成,所以我们需要传递规则的时候必须使用函数
六、匿名函数
1
、定义:匿名函数就是没有名字的函数
(function (){})
à
如果没有在整个
function
外面加小括号的话会报错
2
、作用
(
1
)不需要定义函数名的时候
(
2
)书写起来更简便
3
、匿名函数的调用的三种方法
(
1
)直接调用
/
自调用
(function (){})
();
(
2
)事件绑定
(
3
)定时器
七、构造函数的原理:可以
new
一个对象也不可不
new
一个对象而是直接
return