1 函数介绍
需求:就是一段代码,需要在很多地方使用
函数语法: 函数是一种用于储存代码块的复杂数据类型
作用:解决代码复用的问题.
1. 声明函数: 声明函数只是把代码封装起来,不会执行函数代码体.
function 函数名(){
函数体代码: 需要存储的一段代码
}
2. 调用函数 : 执行函数代码体(函数不调用,代码体不执行)
函数名()
2 函数传参
函数参数:调用者 传递数据 函数
1 传数据: 调用者 函数名(实参)
2 收数据: 函数 function 函数名(形参){ //函数体 }
3. 函数传参原理 : 实参给形参赋值
- 函数传参是按照顺序 一一赋值
- 每一次调用函数 传参过程都是独立的,互不影响
- 函数实参 和 形参 数量 可以不一致
3 函数默认参数(自己在开发中使用不多 ,后面了解 很多js框架函数默认参数底层原理)
函数默认参数 使用 逻辑运算符短路运算(逻辑中断)
应用场景(1)函数默认参数, (2)用于多条件筛选
1. 短路运算: 左边式子就可以决定结果,右边式子不执行
逻辑与&& 一假则假
&& : 找假 . 左边式子值可以转成false,则返回左边式子的值,反之返回右边式子的值
逻辑或 || 一真则真
let res = 10 && null
console.log( res )//null
|| : 找真 . 左边式子值可以转成true,则返回左边式子的值,反之返回右边式子的值
let res1 = 10 || null
console.log( res1 )//10
console.log( 20 && null && undefined )//null
console.log( 20 || null || undefined )//20
! 取反 (没有短路运算,因为只有一个式子)
4 函数返回值 return
1 传 : 函数
function 函数名(){
//函数体 return 值
}
2 收 : 调用者
let 变量名 = 函数名()
3 返回值注意点:
1 return 关键词后面的代码不会执行(return 可以结束函数体,类似于循环中的break)
2 函数如果没有返回值,得到的则是underfined(函数默认返回值是 underfined )
没有返回值:
- a 没有写 return
- b 写了 return,return后面没有返回值
5 作用域(3种)
变量的作用域:变量可以使用的范围
- 全局作用域 在函数外面声明,可以在页面任何地方使用
- 局部作用域 在函数内部声明的变量,只能在函数使用
- 块级作用域 在大括号(分支加循环) 里面声明的变量,只能在大括号内部使用
作用域链: 默认情况下,代码处于全局作用域(0级),当我们声明一个函数之后,就会开辟一个局部作用域(1级),而函数内部又可以声明函数(2级),以此类推形成链式结构,称之为作用域链
作用域链 访问规则 就近原则
6 匿名函数
1.匿名函数 : 没有函数名的函数
* let 函数名 = 匿名函数
* 匿名函数自调用 : ( function(){} )()
* 注意:自调用语法 前一个语句不能省略分号
2.匿名函数作用 : 开辟局部作用域,避免全局变量污染
* 全局变量污染 : 变量名太多了,会增加同名风险