5、函数

一、函数的概念

//函数是引用数据类型  操作的是空间地址
    // function 函数名(形参){
    //    函数体:实现这个方法的js代码
    //   };
    // 函数名(实参) //执行函数

//    求和的函数
    function sum(){
        var total=null;
        total=1+1;
        console.log(total)
        //函数定义的时候,没有任何意义 输出无结果,相当于封装了一个方法。
        // 相当于以一堆字符串的形式存储到一个浏览器开辟的虚拟空间,
        // 并给这个空间分配一个十六进制的地址,最后将这个地址存储到这个函数名,//(全局作用域:代码加载完成)
        // 函数执行的时候,才会将空间内函数体的字符串转为js代码,从上到下执行(再开辟一个小的虚拟空间) //(私有作用域:执行函数的时候)
    };
    sum();
    //函数执行的时候,函数才有意义,形成一个私有作用域, 里面的变量 值等,外界无法访问修改,我们把这种机制叫做闭包。
    sum();
    //sum 就代表这个函数本身,加上()后就是执行这个函数

二、形参

// 形参
    function sum(a,b) {  //逗号隔开
        var total = null;
        total = a + b;
        console.log(total)
        console.log(b)
    };
    sum(1,3);  //函数执行的时候,上面的console.log 才会输出
    sum(100);
    // 只写一个数的时候,没有给形参b 具体的值,默认为undefined   最后是 100+undefined  会输出NaN

三、返回值

//    function sum(a,b) {  //逗号隔开
//        var total = null;
//        total = a + b;
//        return total; //这个函数的返回值
//    };
//    console.log(sum(2,3))
//    console.log(total)
    //没有return 私有域(函数体)里面的东西外面无法获取
//    sum(1,3);
//    sum(100);// 函数中遇到return 后面的代码不执行
//    return 后面可以加个变量 返回值
//    函数没有返回值 输出就是undefined  有返回值就可以输出返回值了


function sum(num1,num2){
    var total=null;
    total=num1+num2;
    console.log(total);
//    return total;  //return 就是当前函数提供的出口,闭包的机制,函数体外面无法获取里面total的值,如果外面想用里面的total的值,需要通过return 把total的值返回给外面即可-->返回值机制
//    外面想用哪个值,就把哪个值返回,-->return total。并不是把变量返回给外面,而是把变量存储的值返回给外面,相等于 return 300;
}
    sum(100,200); // 执行这个函数,本身没有代表的值
    var total = sum(100,200);  //首先把函数sum执行,然后把sum执行的返回值(有return才有返回值)(看sum执行的返回结果,只需要看sum中是否存在return,有return,则其后面返回的值是什么,函数的返回值就是什么。如果sum中没有return,那么默认的返回值就是undefined),赋给外面的变量total
//从函数体外面获取里面某值得时候,有return才能获取,么有return就是undefined ,单函数该运行运行 不影响

    console.log(total);//total这个变量没有定义,即使有了return,返回的只是变量total存储的值,而不是变量total。
    //函数执行的时候会形成私有作用域,包护里面的内容不受干扰,闭包机制,导致了函数体中定义的变量total,在函数体的外面不能直接获取到。

//例子:::::
//    function fn(){
//        var total=300;
//    };
//    var total=fn(); //执行这个函数,将函数执行的返回值 赋给变量total,fn这个函数中没有return,所以默认的返回值就是undefined。
//    console.log(total);

function fn(){
    var total=2;
    return total*10;
    return;//在函数体中,return下面的代码不会执行,有终止函数体中代码执行的作用
};
    console.log(fn);//输出当前函数本身
    console.log(fn());//将fn执行的返回结果输出

四、arguments

 // arguments  存储形参的一个集合  类数组
    function sum(){
        var total=null;
        for(var i=0;i<arguments.length;i++){
            total+=arguments[i];
        };
        console.log(total);// 函数执行时才可以输出
        return total;
    };
//    sum(1,2,3);
//    alert(sum(1,2,3)); // 函数不执行时 有return也可以获取了  没有返回值是没有结果的 闭包机制
//    ??????????

    //任意数求和:::::::::必考
    //无法定义形参个数
//    arguments 函数天生自带的(不管写没写形参,不管是否传递值,arguments这个集合始终是存在的) 用来接收函数传递进来的参数的集合,
    function sum1(){
        console.log(arguments);//arguments 是传递进来的参数的集合
        console.dir(arguments);
        console.log(typeof arguments);// arguments 是一个对象数据类型,是个类数组  不是数组,
        //arguments 它是以数字作为索引值,索引为n存储的是第n+1个参数值,有length的属性,不是数组 叫类数组
        // callee:function sum()...   他还有一个自己特殊的属性callee,代表当前函数本身
    };
//    var total = sum();
    var total = sum1(100,200,300);
/**/
function sum2(){
    var total=null;
    for(var i=0;i<arguments.length;i++){
        total+=arguments[i];
    };
    return total;
};
console.log(sum2(2,3,4));
var total=sum2(2,3,4); console.log(total);

    console.log(sum2(2,3,"4"));

    console.log(sum2(2,3,"a"));
//**/
    function sum3(){
        var total=null;
        for(var i=0;i<arguments.length;i++){
            var cur=Number(arguments[i]);//把传进来的值转为number类型的
            if(!isNaN(cur)){//判断cur是不是有效数字
                total+=cur;
            };
            //对于非有效数字不再进行累加操作,放在出现NaN
//            if(isNaN(cur)){//不是有效数字 ture continue才起作用 后面代码不执行;
//                continue;
//            };
//            total+=cur;
        };
        return total;
    };
    console.log(sum3(2,3,"4","a"))

    //实名函数
    //匿名函数:没有起名字的函数
    //匿名函数分为两种:
    //1、自执行函数 ;+ - !~  定义和执行一起完成
    ;(function(){})();

    +function(){}();
    -function(){}();
    !function(){}();
    ~function(){}();
//    2、函数表达式
//    把函数定义的部分当做一个值赋给一个变量或者元素的某一个行为。
    oDiv.onclick=function(){};

 

posted @ 2017-08-01 21:49  dalyn  阅读(183)  评论(0编辑  收藏  举报