一、函数声明的方式
function 函数名(参数列表){ 函数体; return 返回值} 问题:会被声明提前
给出以下解决方案:
var函数名=function (参数列表){ 函数体; return 返回值} 不会被声明提前
var 函数名=new Function("参数1","参数2",...,"函数体;...")
强烈不推荐使用,因为这种方式会导致解析两次代码,影响性能。
有关这三种声明方式的区别,可以看这篇博文学习:http://blog.csdn.net/ll641058431/article/details/52319737
二、重载
js语法默认不支持重载,最后创建的会覆盖之前创建的所有
解决方法:arguments
1 function pay( ){ 2 //arguments[ , ].length 3 // 0 1 4 if(arguments.length==0) 5 console.log("手机支付..."); 6 else if(arguments.length==1) 7 console.log( 8 "现金支付...收款金额:"+arguments[0]); 9 else 10 console.log( 11 "刷卡结账...卡号:"+arguments[0]); 12 } 13 14 pay();//手机支付... 15 pay(100);//现金支付... 16 pay("6553 1234","123456");//刷卡结账...
也可直接用 arguments 做参数不确定的操作
1 function add(){ 2 var sum=0; 3 for(var i=0;i<arguments.length;i++){ 4 sum+=arguments[i]; 5 } 6 return sum; 7 }
三、匿名函数
创建时不指定函数名
为什么:
1. 节约内存
2. 划分临时作用域
何时: 只要一个函数使用后,希望立刻释放时
如何:
1. 回调(callback): 将一个函数,交给另一个函数去自动调用。
比如: arr.sort(function(a,b){return a-b;})
xhr.onreadystatechange=function(resText){}
btn.onclick=function(){}
str.replace(/正则/,function(kw){return xxx});
2. 自调: 定义函数后,立刻调用自己
何时: 几乎所有自定义的脚本,都要放在匿名函数中
为什么: 避免使用全局变量,避免全局污染
如何:
1. (function(...){...})()
2. +function(...){...}()
(function(){ var start=new Date(); alert("开始加载网页内容...at:"+start.toLocaleTimeString()); })();