函数
作用:让代码可以方便重复使用;函数不用主动运行,需要调用
函数的语法
function 函数名(形参) {
return 返回值
}
console.log(函数名(实参))
函数的调用: 函数名()
函数传参:
传参的作用:把函数在复用过程中会改变的值提取出来, 作为参数传递进去.这样可以极大提高函数的灵活性
形参:本质上就是在函数内部声明变量
实参:给形参赋值
例如:
function getSum(arr) {
let sum = 0
for (let i = 0; i < arr.length; i++) {
sum += arr[i]
}
return sum
}
document.write(getSum([1, 2, 3, 4, 5]))
//arr是形参,[1, 2, 3, 4, 5]是实参
//只需要改变实参就可以实现多个数组进行累加和的操作
注意点:实参的个数和形参的个数可以不一致,如果形参过多 会自动填上undefined , 如果实参过多 那么多余的实参会被忽略
伪数组(arguments)
如果函数不写形参,而写了多个实参的话,那么这些实参就会被传递到函数的伪数组(arguments).
arguments的特点:1、无法使用数组的一些方法;2、可以使用数组索引和数组长度的属性。
函数的返回值(return)
返回函数最后运行的值,这样在调用的时候就比较灵活。
注意点:
1、函数一旦碰到return就不会在往下执行了 函数的结束用return
2、return只能返回一个值,要是想要返回多个值,可以返回数组
函数的作用域
作用域分类:全局作用域;局部作用域;块级作用域
变量分类:全局变量;局部变量;块级变量
注意:局部变量必须是函数里面声明过的变量,变量不声明直接赋值就会变成全局变量
作用域链:变量访问的原则是就近原则;先局部,局部没有再找全局
例如
let num = 10
function fn() {
let num = 20
console.log(num) //20
}
fn()
console.log(num); //10
let a = 1
let b = 10
function fn1() {
let a = 2
let b = '22'
fn2()
function fn2() {
let a = 3
fn3()
function fn3() {
let a = 4
console.log(a) //a的值:4
console.log(b) //b的值:'22'
}
}
}
fn1()
立即执行函数
语法: ()();
注意:括号后面一定要加上分号
// 立即执行的函数可以避免变量重复命名出现的问题
(function() {
let res = 1
console.log(res);
})();
(function() {
let res = 2
console.log(res);
})();