什么是函数
函数:函数是一种复杂数据类型;用来储存代码块
作用:解决代码复用问题
声明函数: 声明函数只会把代码块存起来,并不会直接执行
function 函数名(){
函数体:需要被重复使用的代码
}
调用函数:执行函数体代码
函数名()
function get(){
console.log(`你好,我是函数`)
}
get()
函数传参
函数传参:调用者 传递数据 给函数
传:调用者传
函数名(实际参数(实参))
收:函数
function 函数名(形式参数(形参)){
函数体代码
}
函数传参本质:就是实参给形参赋值的过程
函数传参是按照传入顺序一一赋值
函数传参是一次调用传参过程都是独立的互不影响
函数 形参数量 和 实参数量 可以不一致
function get(text){
console.log(`你好我是函数${text}`)
}
get('函数')
逻辑短路和默认值
1.函数默认参数,我们自己在开发中使用不多。
2.函数默认参数 使用 逻辑运算符短路运算(逻辑中断)
2.1 短路运算: 左边式子就可以决定结果,右边式子不执行
&& : 一假则假
|| : 一真则真
! : 取反(没有短路运算,因为只有一个式子)
2.2 短路规则:
&& : 找假。 左边式子值可以转成false,则无条件返回左边式子的值,右边不执行。 反之无条
件返回右边式子的值。
|| : 找真。 左边式子值可以转成true,则无条件返回左边式子的值,右边不执行。 反之无条件
返回右边式子的值。
function get(mun1, mun2) {
mun1 = mun1 || 1
mun2 = mun2 || 0
console.log(mun1 + mun2);
}
get(10, 20)
get(10)
函数返回值
4.函数返回值 : 函数 传递数据 给调用者
4.1 传 : 函数
function 函数名(){ return 值 }
4.2 收 : 调用者
let 变量名 = 函数名()
4.3 注意点
(1)函数return关键字后面的代码不会执行的
* 只要有return关键字,函数体立即结束执行。
(2)如果函数没有return,则默认返回值是undefined
function get(arr) {
let sum = 0
for (let i = 0; i < arr.length; i++) {
sum += arr[i]
}
return sum
}
let sum = get([10, 20, 30, 50, 60, 580, 50, 50, 5, 52, 0210, 120, 2, 22, 202, 2])
console.log(sum)
返回值的4种情况
无参有返回
无参无返回
有参无返回
有参有返回
作用域
1.js变量作用域: 变量可以使用的区域
* 作用:避免变量污染(变量名相同导致代码冲突)
2.js三种作用域
2.1 全局作用域(全局变量) : 在函数外面let的变量
2.2 局部作用域(局部变量) : 在函数里面let的变量
2.3 快级作用域(快级变量) : 在分支或循环大括号中let的变量
作用域链
作用域链: 默认情况下,代码处于全局作用域(0级链),当声明一个函数之后就会开辟一个局部作用域(1级),而函数里面又可以声明一个函数,又会形成新的作用域(2级),以此类推形成的结构称之为作用域链
变量访问规则: 就近原则
* 当你在一个作用域访问变量的之后,首先会看当前作用域有没有声明。如果有则访问。 没有则往上级作用
域查找,有没有声明。有则访问,没有则继续往上。直到作用域最顶端0级,如果还没有找到。则程序报错 xxx is
not defined
匿名函数
1.匿名函数 : 没有函数名的函数
2.匿名函数作用 : 开辟局部作用域,避免全局变量污染
function (){}
匿名函数的调用方式
let get= function (){
alert('我是匿名函数')
}
(function (){
alert('我是匿名函数')
})()