[js点滴]JavaScript关于函数总结

来源:互联网 发布:电影售票软件 编辑:程序博客网 时间:2024/05/17 05:52
    /*1.函数的概念       函数就是实现某一功能的代码片段.      2.函数的分类      a.预定义函数(系统函数)      b.自定义函数      函数又称之为方法      3.函数定义      function 函数名(参数1,参数2,参数3,...){        函数主体      }     注意两点:     a.function为关键字,用来定义函数;     b.函数名必须是唯一的.        4.函数的写法:    *///   4.1 function 关键字写法     function test(){        console.log("12343");     }//  4.2 函数表达式写法(匿名函数),采用变量赋值的写法     var fun = function(){          console.log("xasc");    };   /* 注意:    1.赋值语句的等号右侧只能放表达式,这种写法是将匿名函数赋值给变量.    2.采用函数表达式写法,function后面不能带有函数名,如果加上函数名,该函数名只在函数主体内部有效    3.函数表达式语句后面要加上分号.     var fun1 = function func(){        alert(typeof func);          console.log("xasc");    };       fun1();     alert(typeof func);    */   //4.3 Function构造函数创建函数对象     var test = new Function(    'x',    'y',    'return (x+y)' )//等价于   function test1(x,y){    return x+y;}/*解释:1.Function构造函数里面三个参数,第1,2个参数表示参数,第3个参数表示函数的实现主体2.该种写法非常不直观,几乎无人使用这种写法*///5.函数的重复定义function t1(){    console.log("t1");}t1();//t2function t1(){    console.log("t2");}t1();//t2/*注意:如果两个函数的函数名一样,后一次的函数定义会覆盖前一个函数定义,由于存在函数名的提升,前一次定义在任何时候都是无效的.*///6.函数调用function t2(){}t2();//表示函数的调用function t3(a,b){    return a+b;}t3(1,2);//有参函数的调用//7.函数名的提升/*在js当中,把函数名等视为变量名,所以一般采用function来定义(第一种方式定义的函数)的函数,整个函数会像变量定义一样,被提升到代码的头部. *  */funct();function funct(){    console.log("adas");}/*解释:funct()在函数的定义之前进行了调用,由于该种方法定义的函数存在函数名的提升,函数funct会自动提升到代码的头部,也就是在调用之前已经声明了.fu();//函数的调用 fu is not a functionvar fu = function() {    console.log("fu");}*///8.如果采用function和函数表达式形式来定义同一个函数,最后总是采用函数表达式形式定义的函数var fus = function(){    console.log("aaaa");}function fus(){    console.log("bbbb");}fus();//aaaa//9.ECMA规定,不得在非函数的代码块中定义函数,如:在if或者try语句中/*if(false){    function fus2(){        console.log("123");    }}fus2();*///10.函数的属性var s = function(){    console.log("xs");}function ss(){}//10.1 name属性 返回函数function后面的函数名.console.log(s.name);//""console.log(ss.name);//"ss"//10.2 length 属性 返回的是定义函数时参数的个数.function sss(a,b,c){}sss(1,2);sss.length;//3//10.3 函数toString() 以字符串形式返回函数的源码//function ssss(){//  //返回值//  return "ABC";//}//ssss.toString();//"function ssss(){\//  //返回值\//  return "ABC";\//}\//"//注意:函数中的注释也会输出出来//11.函数内部的变量提升function add(x){if(x>0){    var temp = x+100; }   }/*相当于function add(x){var temp;   if(x>0){   temp = x+100; }   }注意:与全局变量一样,函数内部的变量,也会发生一个变量名的提升现象,var 声明的变量,无论在函数内什么位置,变量名都会提升到函数体的头部.*///12.函数的作用域var sub = function(){    function sub1(){        console.log("sub1");    }}//sub1();//访问不到,sub1是局部变量,可见范围只在它所在的父级区域//13.函数的参数function s10(a,b){  return a+b;   }var result = s10(2,12);/*注意:1.a,b是s10函数的两个参数,且参数前面不能加var.2.在js当中函数的参数不是必须的,在调用时允许省略3.在js中调用函数时,无论提供多少个参数,都不会报错的4.在js中如果调用函数时,想少传一个参数,则需要把不传的那个参数设置成undefined,例如:s11(undefined,23)*/s10(12,13);//25alert(s10(12,23,12,14));//35s10();//undefineds10.length;//2function s11(a,b){  return b; }alert(s11(undefined,23));//正常 23//14.为函数参数设置默认值function s14(a){    a = a || 1;    return a;}alert(s14(10));//15.同名参数//1.同名参数,取最后参数出现的那个值//2.如果参数都是b,则以后面的参数b为准,即使后面b没有值或值被省略,依旧以最后一个参数为准function s15(b,b,b){    console.log(b);}s15(12);//这里省略了后面的两个参数,所以b的取值为undefined./*16.arguments对象1.由于js中允许函数有不定数目的参数,为了让这些参数不丢失,所以这些参数全部保存在arguments对象里面2.arguments包含了程序运行时的所有参数,arguments[0]第一个参数,arguments[1]第二个参数,以此类推.*///闭包函数        function fun1(){            var n = 1000;            function fun2(){                console.log(n);            }            return fun2;        }    var res1 = fun1();        res1();/*解释:函数fun1返回值是fun2函数,  fun2函数中可以读取到fun1中的变量n,所有在外部就可以获得fun1函数中的变量n了.闭包就是函数fun2,也就是能够读取其他函数中的变量的函数.闭包的定义:就是定义在函数内部的函数,它的本质就是将函数内部与函数外部连接在一起的一个桥梁.*/function fun3(a){    function fun4(b){        return a++;    }    return fun4;}var f = fun3(12);var s1 = f(0);//12var s2 = f(0);//13var s3 = f(0);//14//闭包函数的两个作用://1.可以读取函数内部的变量//2.让这些变量始终保存在内存中,一直存在./*缺点:内存消耗很大,会造成网页性能问题*///  立即执行函数  //1.常规方法//   function(){//          console.log("123");//  }//  f();//函数调用//  2.立即调用函数表达式    //(function(){})();//  或者   // (function(){}());//  注意:最后一个圆括号,是向内部传递参数用的  (function(){            console.log("123");    })();//2.eval()将字符串当做语句执行  eval('var a = 13');//相当于var a = 13;  alert(a);//13    var b = 14;    eval('b = 15');//a = 15    alert(b);//15//  var tr = function(a,b){//      return a+b;//  }//  tr(12,13);    (function(a,b){        return a+b;    }(12,13));
2 0