JavaScript第四天:
函数:
作用:将代码封装起来,方便使用
声明定义: function函数名称(形式参数列表){函数体}
函数命名规范:
-
和变量命名基本一致
-
尽量小驼峰式命名法
-
前缀应该为 动词
-
命名建议:常用动词约定
<script>
function 函数名() {
函数体
}
function sayHi() {
document.write('hi')
}
</script>
函数的调用语法 :
注意:声明(定义)的函数必须调用才会真正被执行,使用 () 调用函数
-
函数体:
函数体是函数的构成部分,它负责将相同或相似代码“包裹”起来,直到函数调用时函数体内的代码才会被执行。函数的功能代码都要写在函数体当中。
<script>
// 函数调用,这些函数体内的代码逻辑会被执行
function 函数名() {
函数体
}
function sayHi() {
// 函数体
document.write('hi')
}
// 函数一次可以调用多次,每一次函数调用函数里面的代码会被重新执行一次
sayHi()
sayHi()
</script>
</body>
函数传参:
函数传参可以极大提高函数的灵活性
调用函数时,需要传入几个数据就写几个,用逗号隔开
<script>
function 函数名(形参) { //参数列表
函数体
}
函数名(实参)
function sayHi(numb1, numb2) {
let sum = document.write(numb1 + numb2)
}
sayHi(10, 20)
</script>
形参:
- 定义函数的时候,写()写的就是形参 :
- 声明定义的时候,形参只是参数占位
- 在调用方法的时候,形参是个变量
- 相当于在方法中声明的局部变量**(只有在方法内部使用)(方法外部使用会报错)**
- 可以定义多个形参
实参:
- 调用函数的时候,写在()里面的就是实参
- 实参就是实际参数,是真正存在的值
- 调用的时候,尽量让形参和实参 :
- 顺序对应
- 数量对应
- 类型对应
方法的调用 :
- 函数名称(实际参数列表)
- 调用函数的过程就是实参为形参赋值的过程
案例:求数组和
<script>
// 形参可任意取名字为arr,声明的局部变量
function getSum(arr) {
//首先声明一个变量为0
let sum = 0
for (let index = 0; index < arr.length; index++) {
sum += arr[index]
}
console.log(sum) //和
}
let array = [88, 97, 78, 59, 80, 79, 66, 58, 40, 100]
// 实参为真实存在的的值,是声明的数组array
getSum(array)
函数返回值:
当函数需要返回数据出去时,用return关键字
语法:
<script>
function name() {
return 10 //数据
}
// 声明一个变量来使用return返回来的值
let num = console.log(name());
</script>
细节:
-
在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用
-
函数内部只能运行到 1 次 return,并且 return 后面代码不会再被执行,所以 return 后面的数据不要换行写
-
return会立即结束当前函数
-
函数可以没有 return,这种情况函数默认返回值为 undefined
作用域:
作用域概述:通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
全局作用域:全局有效
作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件
函数外部let 的变量
全局变量在变量定义之后区域可以访问和修改
局部作用域:局部有效
作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。
函数内部let的变量
局部变量只能在当前函数内部访问和修改
块级作用域:{}内有效
块作用域由 { } 包括,if语句和for语句里面的{ }等
{} 内部的let变量
let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问
变量作用域特殊情况:
- 如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
- 函数内部的形参可以看做是局部变量,所以形参相当于函数内部定义的局部变量,只有在函数内部可以使用
作用链域:
- 函数内部还可以创建函数,函数内部可以使用函数外部的成员
- 当函数内部需要需要一个变量时,自己就使用自己的,如果没有就查找外部作用域,如果还没有,就继续往外部找,直到全局作用域,如果全局都没有,就报错
匿名函数:
介绍: 没有名称的函数
具名函数:
声明:function fn (){}
调用 fn()
匿名函数:
function (){}
目前没有, 先认识
立即执行函数:
声明:(function (){})()
不需要调用,立即执行
场景介绍: 避免全局变量之间的污染
注意: 多个立即执行函数要用 ; 隔开,要不然会报错