基本介绍:
概念:由一堆代码组成,实现了某个功能,可以直接执行或通过行为调用的代码段。
特点:重复使用,选择使用,忽略细节。
函数也是一种变量
创建函数:
-
声明式
声明关键字: function
function fn(){}
fn 函数名
() 参数
{} 执行语句(函数体)(函数的功能代码) -
赋值式
var fn = function(){}
不能把函数整体提升函数的执行
一般情况:函数名+()
另一种情况:行为调用/事件调用
事件和函数的关系:
用户通过触发事件,执行对应的函数
事件,执行,函数
函数:事件处理函数
事件源:触发事件的源头
事件类型:什么行为(点击,双击。。。)
事件处理函数:触发事件源的对应的事件类型,直接被执行的函数
事件类型有哪些?
鼠标:
点击 onclick
双击 ondblclick
按下 onmousedown
抬起 onmouseup
进入 onmouseover onmouseenter
离开 onmouseout onmouseleave
移动 onmousemove
鼠标右键事件 oncontextmenu
注意
返回当事件被触发时,哪个鼠标按钮被点击。button
返回当某个事件被触发时,鼠标指针的水平坐标。screenX
返回当某个事件被触发时,鼠标指针的垂直坐标。screenY
返回触发此事件的元素(事件的目标节点)。target
键盘:
按下 onkeydown
抬起 onkeyup
按下并抬起 onkeypress
ps: 键盘事件只能加给具有焦点的元素,或document
表单控件:
失去焦点: onblur
获取焦点: onfocus
输入 oninput
改变 onchange
提交 onsumbit
重置 onreset
页面
页面加载结束 onload
滚动 onsorll
改变大小 onresize
发生错误 onerror
统一语法:
事件源.事件类型 = 事件处理函数
参数:
-
函数在执行时的参数:形参
-
函数在定义时的参数:实参
实参可以传递任何数据,相当于变量中可以保存任何数据
实参被形参接受并保存
形参相当于变量,实参相当于具体的值参数可以有多个: 形参和实参的数量一致:一一对应 形参多,实参少: 多出来的形参为undefined 实参多,形参少: 多出来的实参被传到函数中的augments区域中;
arguments:
只能在函数内部拿到
是一个专门用来存储所有实参的数组对象。
arguments.length 长度,实参的个数
arguments[i] 索引,每个实参
函数的写法:
- 常见:有名函数,声明式创建的函数,正常函数,正常执行,正常使用
- 无名函数,非正常函数,不允许直接存在
2-1.可以作为值存在---->赋值式创建函数
2-2.可以作为实参存在---->回调函数
2-3.可以作为行为处理函数存在---->事件处理函数
2-4.可以作为匿名函数的函数体存在---->匿名函数 - 匿名函数:立即执行,好像没写函数一样
(function(){})()
回调函数:
将函数A作为参数,传到另一个函数B中,在函数B中执行函数A,那么作为参数的函数A就是回调函数
js中的特色部分,解决了js中的异步问题
return:
为什么要有返回值?
如果函数处理的结果或数据需要二次使用,怎么拿到数据
怎么返回值?
关键字:return
return要返回的内容
return的作用:
将函数内部处理的数据或结果,返回到函数外部进行二次使用
立即结束函数
所有函数都有返回值,没有return,返回值为undefined,有return就是return后面的值
return的应用场景:
功能函数可以有,但是不需要返回值
数据处理函数必须有
作用域:
生效的区域,可以被使用的区域。
-
全局:整个代码空间
-
局部:函数内部就是局部作用域
全局变量和局部变量重名 在局部作用域内,局部会覆盖全局 在全局作用域内,局部不会覆盖全局 函数的形参相当于当前所属函数的局部变量 如果在当前作用域中,没有找到要使用的变量,那么会自动上级作用域查找,如果都没有,就会报错
变量的生命周期:
全局变量:一直存在,跟随程序的结束而结束
局部变量:在作用域开始的位置被声明,结束的位置被删除。全局相对于局部:方便,但是比局部消耗性能,尽量少用或不用 折中法:给变量外面加一个匿名函数
提升:
var的提升: 提前声明,远处赋值 function: 整体提升 var的提升要先于function的提升,所以会执行func的内容,var的内容会被function所替代 赋值式创建函数:提升的是变量,不是函数
递归:
函数自己在内部调用自己
递 转递
归 归来
构造函数:
注意:构造函数不是一种函数,是一种执行方式
创造对象,为面向对象服务
机器,批量产出相同功能,不同特点的对象的机器
构造器:机器,构造器
基本的构造函数:
内置的构造函数:创建数据
构造函数方式创建
字符: var s = new String();
字面量方式创建
字符: var s = "hello"
高级的构造函数
自定义的构造函数(这里要到后面才能说到)
只要被new执行,返回值必然是对象