函数
- 定义
- 函数声明
- 函数表达式
- 组成形式
- 函数名称
- 参数
- 形参
- 实参
- 返回值
函数声明
// 第一种方式
function box (参数){
// 内容
};
// 第二种叫命名函数表达式
var box = function test(参数){
// 内容
}
// 在浏览器console上输出 box.name --> test
// 第二种写法function后面就成了表达式,有没有名字无所谓,所以延伸出了第三种写法
// 第三种叫匿名函数表达式-->函数表达式
var box = function (参数){
//内容
}
// 在浏览器console上输出 box.name --> box
//函数执行
box();
参数
- 参数也叫参变量,是一个变量,是在函数中一个非常重要的组成部分,能使函数格外灵活。
形式参数与实际参数
// 形式参数 --> 形参
function test1(a,b){
var c= a+b
console.log(c);
}
// 实际参数 --> 实参
test1(1,2); // 输出3 // (1,2)作为参数传进去
不定参数
- 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数,我们一般称使用 arguments 为可变参或不定参
// 不定参数 例子一
function test2(a){
// a 就等于1
// 2,3不用管
// 隐式的方法arguments[1,2,3]实参列表
// 找到多余的实际参数
}
test2(1,2,3); //执行tset2之后(1,2,3)作为参数传进去
// 不定参数 例子二
function test3(a,b,c,d){
// a 等于1
// b 等于2
// c 等于3
// d 等于undefined
找到形参的长度sum.length
}
test3(1,2,3); // 执行tset3之后(1,2,3)作为参数传进去
不定参的好处如:
var result = 0;
function sum(){
for(var i = 0; i<arguments.length;){
result += arguments[i];
i++;
}
console.log(result);
}
sum(1,2,3,4,5,6,7,8,9);
JS 的映射规则
function sum(a,b){
a = 2;
console.log(arguments[0]); // 打印出2,参数a改变了
}
sum(1,2);
function sum(a,b){
a = 2;
arguments[0] = 3
console.log(arguments[0]); // 打印出3,参数a改变了,可以相互改变
}
sum(1,2);
function sum(a,b){
//arguments[1]没值
b = 2;
console.log(arguments[1]);
}
sum(1);
- 打印出 undefined
- 实参列表传进来的时候他就有几个,就算我让b等于2,它也不会往 arguments 里面加了。
- 函数根本就没有,这个时候 b 就当一个变量用了。
- b 实参不映射,因为形参比实参多了一位 b,只有他们相等的时候他们才会有映射的规则,不相等的时候,形参多了他不对应实参了,他们之间不映射。
结束条件加返回值return
- 结束函数,如果没有写,系统默认自带return
- 把值返回到函数外部
function sum(){
return 123
}
var box = sum();-->返回123
作用域初探
作用域定义: 变量(变量作用域又称上下文)和函数生效(能被访问)的区域。
全局、局部变量。
作用域的访问顺序。
函数里面可以访问函数外面的东西在 script 标签上定义的变量叫全局变量,在函数内部定义的变量叫局部变量。
// a 是全局变量
var a = 123;
function test(){
console.log(a); // 打印出来是123
// b 是局部变量
var b = 123;
function demo(){
var c = 234;
console.log(a);
console.log(b);
}
console.log(c); //报错c is not defined;
};
test();
console.log(b); //报错b is not defined
function test(){
var a = 123;
}
function demo(){
var b = 12;
}
// test 和 demo 不能相互访问
后续会用专门的一章来介绍函数的作用域,这里只是简单地介绍一下