1。函数
+是一个JS中的复杂数据类型,叫做 Function
+什么是函数?
=>是一个"盒子",承载一段代码
=>需要的时候,可以把"盒子"内的代码拿出来执行
2。函数的两个阶段
2-1。函数定义阶段
=>声明式函数:function函数名(){代码}
=>赋值式函数: var函数名= function(){代码}
=>注意:函数定义阶段,书写在函数体内的代码是不执行的
2-2。函数调用阶段
=>函数名()
=>每书写一次,就会把函数体内的代码从上到下的执行一遍
3。函数的参数
3-1。形参
=>书写在函数定义阶段的小括号内
=>可以书写多个,多个之间使用逗号(,)分隔
=>就是一个定义在函数内部的变量,只能在函数内部使用
=>形参的值由函数调用时的实参决定
3-2。实参
=>书写在函数调用阶段的小括号内
=>可以书写多个,多个之间使用逗号(,)分隔
=>就是在按照顺序依次给每一个形参进行赋值
4。函数内的注意
4-1。调用上的注意
=>声明式函数可以先调用,也可以后调用
=>赋值式函数只能后调用,先调用会报错
4-2。参数个数上的注意
=>一样多:按照从左到右的顺序依次给每一个形参赋值
=〉形参多:前面的按照顺序依次赋值,多出来的形参因为没有实参赋值,在函数内使用的时候就是undefined
=>实参多:前面的按照顺序依次赋值,多出来的实参因为没有形参接受,不能再函数内直接使用
5. arguments
=>是一个函数内天生自带的变量
=>是一个"盒子",是一个承载数据的"盒子"
=>承载的就是所有的实参
5-1.arguments 的索引
-> arguments 内的所有数据按照“序号"进行排列的
->我们管"序号"叫做索引或者下标
->索引(下标):从0开始,依次+1
5-2。访问arguments 内的数据
->利用索引进行访问
->语法:arguments[索引]
->如果arguments 内有该索引,那么就是该索引位置的数据
->如果 arguments内没有该索引,那么就是 undefined
5-3. arguments 的长度
->语法:arguments.length
->得到的是一个数字,表示 arguments内有多少个数据,其实就是多少个实参
5-4。遍历arguments
->遍历:从头到尾访问到每一个arguments 中的数据
->利用 for循环来进行遍历
+因为arguments 的索引是一组有规律的数字
+又因为循环可以给我们提供一组有规律的数字
+我们就可以使用循环提供的一组有规律的数字来当做索引访问arguments内的每一个数据
例如:for(var i =0;i<arguments.length;i++){
//在循环内,可以把循环控制变量i当做索引来使用
//arguments[i]就是arguments 内的每一个数据
}
6,函数的返回值
=>给函数创造一个执行后的结果
=>语法:return xxx
=>这个函数执行完毕的结果,就是书写在return后面的内容
7,打断函数
=>使用return关键字
=>当代码执行到return时,会直接结束函数
=>return后面的函数不再执行了
8。作用域
=>什么是作用域:一个变量(变量名和函数名)的生效范围
=>主要提供了三个机制
=>作用域的分类
->全局作用域:每一个页面打开就是一个全局作用域
->私有作用域:**只有函数生成私有作用域**
=>作用域的上下级关系
->写在哪一个作用域下的函数,就是哪一个作用域的子级作用域
8-1。变量定义机制
->定义在哪一个作用域内的变量
->就是哪一个作用域的私有变量
->只能在该作用域及其后代作用域内使用
8-2。变量赋值机制
->当你需要给一个变量赋值的时候
->自己作用域内有,直接给自己的赋值
->自己的没有,就给父级作用域的赋值
->如果还没有,就给再父级作用域的赋值
->以此类推直到全局作用域都没有
->那么把这个变量定义为全局变量在进行赋值
8-3。变量访问机制
->当你需要获取一个变量的值的时候
->首先在自己作用域内查找,如果有,直接使用,停止查找
->如果没有,去到父级作用域查找,如果有直接使用
->如果还没有,去到再父级作用域查找
->以此类推,直到全局作用域都没有,那么直接报错