[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
- [js点滴]JavaScript关于函数总结
- [js点滴]JavaScript关于数组的方法总结
- [js点滴]JavaScript字符串常见方法总结
- [js点滴]JavaScript事件详解
- 【学习点滴-js】js学习总结。
- [js点滴]Javascript类型转换的技巧
- [js点滴]JavaScript排序算法汇总
- [js点滴]JavaScript之懒加载概念
- [js点滴]JavaScript瀑布流实现技巧
- [js点滴]JavaScript事件详解01
- [js点滴]JavaScript事件传播02
- [js点滴]JavaScript事件Event对象03
- [js点滴]JavaScript之鼠标事件04
- [js点滴]JavaScript之键盘事件05
- [js点滴]JavaScript之触摸事件07
- [js点滴]JavaScript之文档事件08
- [js点滴]JavaScript事件详解大纲
- [js点滴]JavaScript进度事件09
- 产生ENUM方法
- 368_ EditText禁止输入中文
- 面向对象
- 127. Word Ladder-未完待续
- C++中的memset
- [js点滴]JavaScript关于函数总结
- 3080 道路规划
- Android面试指南-面霸之路06-handler及mvp架构分析、设计
- Dinic&EK模板记录
- BZOJ3509: [CodeChef] COUNTARI
- python 学习之cmd下的if语句
- 写给想创业的朋友,向敢于创业的朋友致敬
- 快速排序
- Kafka源码深度解析-序列12 -Server核心组件之2-ReplicaManager核心数据结构与Replica同步原理