JS基础学习(3)

91 阅读2分钟

函数

  • 函数的作用是什么?
    • 高内聚,低耦合 -> 模块的单一责任制
    • 解耦合 -> 用函数能很好的解耦合

函数声明

    function test(参数){
        函数的执行语句;
    }
    
    // 表达式 字面量
    // 声明一个test的变量,把函数赋值给这个变量
    // test1只能在函数内部调用,外部是不可见的
    // 当用表达式定义函数的时候,叫做匿名函数(后面的函数没用名字)
    var test = function test1(){
        console.log(1);
    };
    function one(){
        console.log("我是个很牛的函数");
    };
    one();
    one();
    // 函数只有被调用的时候才会执行。

函数的组成部分

function 函数名 参数(可选)返回值()return

参数

  • 参数有点像是函数内部声明的变量,但是只是声明没有被赋值。
  • 形参和实参的数量可以不相等
    // 不调用就是形式上占位用的 -- 形参
    function test(a,b){
        // 相当于定义了 var a,b 但是不赋值
        console.log(a + b);
    }
    // 实际参数 -- 实参
    test(10,20);
    
    // arguments
 function test(){
        var i = 0;
        for(var a = 0; a < arguments.length; a++) {
            i += arguments[a];
        }
        console.log(i);
    }

    test(1,2,3,4);
    
    function test(a,b){
        a = 3;
        // 可以改变实参 
        // 但是a 和 arguments[0] 不是一个
        // a 是栈内存
        // arguments[0] 是堆内存 ,村的 【1,2】数组,在栈内存存储一个地址,给一个指针
        console.log(arguments[0]);// 3
    }
    test(1,2);
    
    function test(a,b){
        b = 3;
        // 实参没有传值 改变不了
        console.log(arguments[1]);// undefined
    }b
    test(1);

  • 实参和形参会产生一种映射的关系,实参和形参不是同一个量,是存放在不同地方的,系统的设置是有映射关系的无论你的实参怎么赋值,你的形参都会跟着变,但是一定是形参里面有对应的值才行,如果没定义的值没有用,会是undefined。

return的问题

  • 返回一个实际的值,或者变量
  • 终止函数执行,如果自己不写,会隐式添加

function test(){
    return 10;
}
console.log(test()); // 10

function tst(name){
    return name || "没有值";
}
console.log(tst());