函数的定义及好处
(1)函数就是把特定功能的代码抽取出并进行封装,用来重复执行一些功能。
(2)使用函数的好处:
函数可以重复某一部分代码(通过函数名调用)
使程序变得更简短而清晰
便于程序维护
函数的定义
· 关键字function声明(声明式):
格式:function 函数名(){}
· 函数表达式(赋值式)
格式:var 函数名 = function(){}
· Function构造函数(不推荐)
var sum = new Function(‘num1’,’num2’,’return num1+num2’);
尽量避免与变量重名
函数的分类
内置函数 alert()
自定义函数
匿名函数
函数的执行
声明提前:
1.执行js代码前,会将所有的声明提前到当前作用域的最前面。
2.当声明提前完成后,才从上往下执行js代码。
备注:不能再赋值式声明函数前,先使用函数,这样会报错:is not a function(声明提前)
关键字 function声明的函数,可以在函数前后任意调用。
运算无法进行下去会进行隐性转换 、与数字运算无法进行输出NaN.
执行类型
1.手动调用:
sum();
2.事件驱动:
格式:元素.事件 = 函数名(或者匿名函数);
buton.onclick = sum;
常用事件
· onclick:点击事件
· ondblclick:双击事件
· onmouseover:鼠标移入事件
· onmouseout:鼠标移开事件
· onchange:内容改变事件(一般用于表单元素)
onkeyup:键盘按键弹起事件
作用域
1.全局作用域:函数最外层。
2.局部作用域:函数内。
3.全局变量:声明在全局作用域中的变量,在任意位置使用。
4.局部变量:声明在局部作用域中的变量,只能在当前函数内使用。
变量的访问规则
就近原则(如查找变量a):
* 使用变量a时先从当前函数查找,如果有则可以使用;
* 如果当前函数无变量a,则往父级函数查找,如果找到则使用,并停止查找;
* 如果在父级函数还是无法找到,则继续往上一层函数查找,以此类推;
* 直到最顶层(全局作用域),如果还是没找到,则报not defined错误;
作用域链
当函数访问变量时,根据就近原则从内到外查询变量,这个路径称为作用域链。
函数的实参与形参
函数的传参:传参的作用:将值传入函数内
形参:函数声明时的参数(变量)形式参数
实参:函数执行时的参数 实际参数
注意:形参和实参的数量可以不同
argunments
一个类数组,保存着实参的信息
arguments[n (从0开始)] 可以获取到实参的长度
argunments.length 获取实参的长度
函数返回值 return
1. 传参是将值传进函数内,return是将值返回到函数外,需要用一个变量接收。
this 当前对象
取决于谁调用了这个函数。
1。大多数情况下,执行函数的对象一般都是window
2。事件驱动执行函数,那么此时的this 指向执行函数的对象.
递归:自己执行自己
*需要一个退出函数return条件,若不存在退出条件会死循环。
--num(先自减再返回值)num--(先返回值再自减)
*递归前输出,正向输出
*递归后输出,按最后一次递归的值输出。
回调函数
若想执行乙,但是需要甲的一个变量,选择在甲函数里面执行乙函数。
!!!!函数作为参数!!!!!!
数组Array:一个变量存储多个信息
1.获取数组某个信息 索引从0开始计算。
2.属性length 数组的长度。
函数的传参(基本数据类型与引用数据类型的区别)
(1)基本数据类型传参
(2)引用数据类型传参(其实传递的是地址,复制出去的数的值改变,会影响到原数组的值)