函数
函数Function
了解函数
函数就是把特定功能的代码抽取出来并进行封装,用来重复执行一些功能,并起个名字(函数名)。函数对任何语言来说都是一个核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行
- 使用函数的好处,为什么要使用函数
- 函数可以重复执行某一部分代码(通过函数名调用)
- 使程序变得更简短而清晰
- 有利于程序维护
- 什么时候需要函数
- 当相同的代码出现多次时
- 当需要提取公共代码时
函数的定义
- 关键字声明(声明式): 格式:
function 函数名(){}
function sum(){}
函数的声明会提前 ==> 解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);
- 函数表达式(赋值式)
var sum = function(){}
- 匿名函数: 没有名字的函数就叫匿名函数
函数的执行
- 手动调用:
sum();
- 事件驱动: 格式:元素.事件 = 函数名;
buton.onclick = sum;
常见事件触发函数
- onclick:点击事件
- ondblclick:双击事件
- onmouseover:鼠标移入事件
- onmouseout:鼠标移开事件
- onchange:内容改变事件(一般用于表单元素)
- oninput:输入内容时触发
常用内置函数
javascript内部事先定义好的函数
声明提前
- 函数声明提前
- 变量声明提前
声明但没有赋值的变量默认为undefined
var a = 10;
function test(){
console.log(a);
var a=20;
}
test() ==> 会得到什么信息?
作用域
俗称“使用范围”,即能够使用某个变量的范围,分<全局作用域>和<局部作用域>
- 全局变量与局部变量
- 全局变量:在全局作用域下声明的变量,可以在任意地方中使用,作用范围比较大,我们称为全局变量
- 局部变量:在函数内(局部作用域)声明的变量,只在函数中可以使用,作用范围较小,我们称之为局部变量
- 变量的访问规则
- 就近原则(如查找变量a):
- 使用变量a时先从当前函数查找,如果当前函数有变量a则使用;
- 如果当前函数无变量a,则往父级函数查找,如果找到则使用,并停止查找;
- 如果在父级函数还是无法找到,则继续往上一层函数查找,以此类推,直到最顶层(全局作用域),如果还是没找到,则报not defined错误;
- 作用域链:每个函数在定义时就形成了局部作用域,如果存在多个函数嵌套,他们之间就会建立起某种联系,直到全局作用域,这种联系称之为作用域链。当函数访问变量时,根据就近原则在这个作用域链中从内到外查询变量。
- 就近原则(如查找变量a):
函数的参数
- 形参,就是局部变量
- 形参与实参的区别:
- 形参:声明函数时圆括号内定义的变量
- 实参:函数执行时传入的参数
形参和实参的数量可以不同
-
arguments 函数内部隐藏的对象(是一个类数组),保存着实参的信息
- length: 实参的数量
- 了解索引值
- 读取值
-
回调函数:函数作为参数传递
函数返回值
- 终止函数的执行,return后的代码不会执行
- return后如果有值,则把这个值返回到函数执行的地方
如果函数没有return,执行完后返回undefined
函数中的this
函数中的this是一个关键字,表示当前对象,而当前对象是谁,取决于谁调用了这个函数
函数递归
函数可以自己调用自己, 成为函数的递归调用
递归调用的过程:
- 首先去找临界值,即无需计算,获得的值(一般是返回该值)。
- 找这一次和上一次的关系(一般从后往前找)
- 假设当前函数已经可以使用,调用自身计算上一次的运行结果,再写出这次的运行结果。