[js点滴]JavaScript关于函数总结
2016-10-26 22:16
399 查看
/*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();//t2 function 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 function var 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);//25 alert(s10(12,23,12,14));//35 s10();//undefined s10.length;//2 function 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);//12 var s2 = f(0);//13 var 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));
相关文章推荐
- [js点滴]JavaScript关于数组的方法总结
- JS中关于把函数作为另一函数的参数的几点小总结
- 玩转Web之JavaScript(四)-----javaScript语法总结(四) JS中的函数
- 关于JS里的函数作用域链的总结
- 关于 javascript 闭包及函数原型 作用链域 总结
- JS中关于把函数作为另一函数的参数的几点小总结
- [js点滴]JavaScript字符串常见方法总结
- JS中关于把函数作为另一函数的参数的几点小总结
- 17javascript看到的一篇关于JS函数的介绍
- 【JavaScript】a标签onclick传递参数不对,A标签调用js函数写法总结
- [Asp.net+JS]asp.net中调用javascript自定义函数的方法总结
- 玩转Web之JavaScript(四)-----javaScript语法总结(四) JS中的函数
- JS和Jquery中关于-字符串处理-的函数总结
- JavaScript学习记录总结(六)——js函数闭包特性
- JavaScript总结学习一:js中构造函数与普通函数的区别
- JavaScript学习记录总结(四)——js函数的特殊性
- [JS]Javascript的函数总结
- 玩转Web之JavaScript(四)-----javaScript语法总结(四) JS中的函数
- 关于javascript操作表单提交JS报错的一点总结
- [Asp.net+JS]asp.net中调用javascript自定义函数的方法总结