函数参数及返回值
# 1.形参和实参
// 形参:形式上占位的参数,用于占位 a,b 就是形参
function test(a, b) {
console.log(a, b); // 1 2
// arguments:函数的所有实参
console.log(arguments); // [1, 2]
// arguments.length:实参个数
console.log(arguments.length); // 2
}
// 实参:实际传入的参数
test(1, 2);
// 函数名.length:形参个数
console.log(test.length); // 2
总结:
- 形参可以有很多个,实参不一定等于形参。
- 给函数传递实参的时候要与实参一一对应。
# 2.默认参数
// 初始化参数:默认值:undefined
function test(a = 1, b) {
console.log(a); // 1
console.log(b); // 2
}
test(undefined, 2);
# 3.arguments 映射
- arguments是一个伪数组,是函数天生自带的属性,用于存放参数。
// 函数的映射与返回
function test(a, b) {
// 函数内部能修改已经定义的实参值
a = 3;
console.log(arguments[0]); // 3
// 注意a与arguments[0]不是一个东西,但是存在映射关系,
// 函数内部认为对应值是一样的
// 函数内部不能修改未被定义的实参值
b = 3;
console.log(arguments[1]); // undefined
// 如果不写return,系统会自动添加一个this
return; //作用:终止函数执行、返回一个值
}
test(1);
# 4.arguments使用
- arguments 中保存着函数的参数。
function test() {
var a = 0 ;
for(let i=0 ; i<arguments.length; i++) {
a+= arguments[i];
}
return a;
}
var res = test(1,2,3,4,5);
console.log(res); // 15
# 5.访问全局变量和局部变量
- 全局变量:定义在函数外部的变量,称为全局变量。通过作用域链即可访问到(作用域链后面总结)
- 局部变量:函数里面定义的变量是局部变量。(函数的参数也是局部变量)
- 全局变量和局部变量同名情况下:在函数内部,变量值全部指向局部变量。
// 函数内部可以访问并修改函数外部的变量
// 函数外部不能访问到函数内部的变量
var a = 1; // 全局变量
function test1() {
var b = 1; // 局部变量
console.log(a); // 1
function test2() {
var c = 3; // 局部变量
console.log(b); // 1
b = 2;
}
test2();
console.log(b); // 2
console.log(c); // ReferenceError: c is not defined
}
test1();
console.log(b); // ReferenceError: b is not defined
TIP
简单提及下作用域的概念:在函数内部,当我们访问一个变量的时候,这个变量既不是用var声明的也不是函数的参数,那么我们就到函数的父作用域上去找这个变量, 如果父作用域也不存在,就继续向上查找,直到找到window。这种向上寻找的机制被成为作用域链。
# 6.返回值
- return 是返回的意思,给函数一个返回值和中断函数。
- return 关键字可以返回一个结果。
- 如果函数没有return,打印函数的结果就是undefined。