函数

  • 定义
    • 函数声明
    • 函数表达式
  • 组成形式
    • 函数名称
    • 参数
      • 形参
      • 实参
    • 返回值

函数声明

  1. // 第一种方式
  2. function box (参数){
  3. // 内容
  4. };
  5. // 第二种叫命名函数表达式
  6. var box = function test(参数){
  7. // 内容
  8. }
  9. // 在浏览器console上输出 box.name --> test
  10. // 第二种写法function后面就成了表达式,有没有名字无所谓,所以延伸出了第三种写法
  11. // 第三种叫匿名函数表达式-->函数表达式
  12. var box = function (参数){
  13. //内容
  14. }
  15. // 在浏览器console上输出 box.name --> box
  16. //函数执行
  17. 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 不能相互访问

后续会用专门的一章来介绍函数的作用域,这里只是简单地介绍一下