一、函数的使用
1.声明函数 : 是一个存储过程,此时不会执行函数体代码
function 函数名(){
函数体代码: 需要存储的一段代码
}
2.调用函数 : 执行函数体代码
函数名()
//1.声明函数 : 把代码存入容器中
//2.调用函数: 执行函数体代码
二、 函数是一种用于存储代码块的复杂数据类型
* 作用:解决代码复用问题
1.声明函数 : 声明函数只是把代码存起来,不会执行函数体
function 函数名(){
函数体代码: 需要存储的一段代码
}
2.调用函数 : 执行函数体代码
函数名()
3.函数参数 : 调用者 传递数据 函数
3.1 传:调用者
函数名(实际参数)
3.2 收:函数
function 函数名(形式参数){ //函数体代码 }
3.3 函数传参本质: 实参给形参赋值的过程
(1)函数传参是按照传入顺序一一赋值
(2)函数每一次调用传参过程都是独立的,互不影响
(3)函数 形参数量 和 实参数量 可以不一致的
三、 逻辑中断
1.函数默认参数,我们自己在开发中使用不多。(了解后面很多js框架函数默认参数底层原理)
2.函数默认参数 使用 逻辑运算符短路运算(逻辑中断)
2.1 短路运算: 左边式子就可以决定结果,右边式子不执行
&& : 一假则假
|| : 一真则真
! : 取反(没有短路运算,因为只有一个式子)
2.2 短路规则:
&& : 找假。 左边式子值可以转成false,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。
|| : 找真。 左边式子值可以转成true,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。
*/
四、简单梳理函数的每一个步骤
0.函数语法 : 函数是一种用于存储代码块的复杂数据类型
* 作用:解决代码复用问题
1.声明函数 : 声明函数只是把代码存起来,不会执行函数体
function 函数名(){
函数体代码: 需要存储的一段代码
}
2.调用函数 : 执行函数体代码
函数名()
3.函数参数 : 调用者 传递数据 函数
3.1 传:调用者
函数名(实际参数)
3.2 收:函数
function 函数名(形式参数){ //函数体代码 }
3.3 函数传参本质: 实参给形参赋值的过程
(1)函数传参是按照传入顺序一一赋值
(2)函数每一次调用传参过程都是独立的,互不影响
(3)函数 形参数量 和 实参数量 可以不一致的
4.函数返回值 : 函数 传递数据 给调用者
4.1 传 : 函数
function 函数名(){ return 值 }
4.2 收 : 调用者
let 变量名 = 函数名()
4.3 注意点
(1)函数return关键字后面的代码不会执行的
* 只要有return关键字,函数体立即结束执行。
(2)如果函数没有return,则默认返回值是undefined
五、开关思想的浅尝
开关思想主要分为三个流程
(1)声明一个开关变量(一般默认为true)
(2)遍历数组,判断每一个元素是否满足条件,遇到不满足修改开关变量为false
* 遇到满足的不用修改,因为默认就是true
(3)返回开关变量值
六、作用域及匿名函数初识
/*
作用域的简介
1.js变量作用域: 变量可以使用的区域
* 作用:避免变量污染(变量名相同导致代码冲突)
2.js三种作用域
2.1 全局作用域(全局变量) : 在函数外面let的变量
2.2 局部作用域(局部变量) : 在函数里面let的变量
2.3 快级作用域(快级变量) : 在分支或循环大括号中let的变量
*/
作用域的分类及使用方式
1.js变量作用域: 变量可以使用的区域
* 作用:避免变量污染(变量名相同导致代码冲突)
2.js三种作用域
2.1 全局作用域(全局变量) : 在函数外面let的变量
2.2 局部作用域(局部变量) : 在函数里面let的变量
2.3 快级作用域(快级变量) : 在分支或循环大括号中let的变量
3.作用域链: 默认情况下,代码处于全局作用域(0级链),当声明一个函数之后就会开辟一个局部作用域(1级),而函数里面又可以声明一个函数,又会形成新的作用域(2级),以此类推形成的结构称之为作用域链
4.变量访问规则: 就近原则
* 当你在一个作用域访问变量的之后,首先会看当前作用域有没有声明。如果有则访问。 没有则往上级作用域查找,有没有声明。有则访问,没有则继续往上。直到作用域最顶端0级,如果还没有找到。则程序报错 xxx is not defined
1.匿名函数 : 没有函数名的函数
2.匿名函数作用 : 开辟局部作用域,避免全局变量污染
let fn = function(){
alert(1111)
}