@15013890200
2018-08-13T10:39:09.000000Z
字数 3994
阅读 585
原生js 闭包
tips:
tips:网上有用正则表达式写的函数,我是用解析url链接参数方式获取个参数
function getUrlParam(){/**git Testhhh哦呵呵呵branch master-dev tijiao-issue1011、判断url参数个数,为空则直接返回空;2、判断传入的参数是否为空,为空:判断url参数个数,个数为1,则返回参数值;个数不为1,则返回空;不为空:判断url参数个数,个数为1,且对应参数无参数名只有参数值,则直接返回参数值;如果对应参数包含参数名则比对参数名,一致则返回参数值,否则返回空个数不为1,则遍历参数数组,寻找与参数名对应的参数值,找到则返回相应的参数值,否则返回空*/let str = '';let url = location.href;let param_str = url.split('?')[1];if(!param_str)return;let key_value = param_str.split('&');let arg = arguments;if(!arg || arg.length === 0){if(key_value.length === 1){if(key_value[0].indexOf('=') === -1){return key_value[0];}else{return key_value[0].split('=')[1];}}return;}else{str =arguments[0].toString();}if(!key_value || key_value.length <= 0)return;else{if(key_value.length == 1){if(key_value[0].indexOf('=') === -1){return key_value[0];}else if(key_value[0].split('=').length == 2){if(key_value[0].split('=')[0] == str){return key_value[0].split('=')[1];}else{return;}}}else{for(let i = 0; i < key_value.length; i++){let param = key_value[i].split('=');if(param[0] == str){return param[1];}}return;}}}
getUrlParam() //当url链接参数只有一个的时候,可以不指定参数名,直接返回参数值getUrlParam(str) //返回指定参数名对应的参数值,没有则返回空值
function getFormatDate(){/*1、参数1代表传进来的日期格式,可以是日期对象,也可以是日期的value数值2、参数2代表最终返回结果,year、month、day、hour、minute、second 分表表示精确到对应位,week表示输出星期几3、参数1不传表示默认当前日期;参数2不传默认输出精确到秒*/let arg = arguments[0];let str = arguments[1];let date = null;let weeks = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];if(!arg){date = new Date();}else{if(typeof arg === 'object'){date = arg;}else{date = new Date(arg);}}let year = date.getFullYear();let month = date.getMonth() + 1;let day = date.getDate();let hour = date.getHours();let minute = date.getMinutes();let second = date.getSeconds();let week = date.getDay();month = month > 9 ? month : ('0'+month);day = day > 9 ? day : ('0'+day);hour = hour > 9 ? hour : ('0'+hour);minute = minute > 9 ? minute : ('0'+minute);second = second > 9 ? second : ('0'+second);switch(str){case 'year': return year;case 'month': return year+'-'+month;case 'day': return year+'-'+month+'-'+day;case 'hour': return year+'-'+month+'-'+day+' '+hour;case 'minute': return year+'-'+month+'-'+day+' '+hour+':'+minute;case 'second': return year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;case 'week': return weeks[week];default: return year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;}}
getFormatDate() //获取当前时间,精确到秒getFormatDate(arg) //arg可以为时间戳也可以为日期对象,返回指定日期的时间,精确到秒getFormatDate(arg1,arg2) //arg1时间参数,arg2返回的日期格式,具体看代码首部注释
tips:
tips:设置参数的同时,设置一个参数过期参数
function setLocal(key,value,expire){let key_timestamp = key + 'TimeStamp';let now_timestamp = (new Date()).valueOf();let time = expire ? (now_timestamp + expire*24*60*60*1000) : (now_timestamp + 24*60*60*1000);window.localStorage[key] = value;window.localStorage[key_timestamp] = time;}
setLocal(key,value,expire) //key参数名(必传),value参数值(必传),expire参数过期时间,不传则表示1天后过期
tips:删除参数的同时,删除对应的过期参数
function removeLocal(key){window.localStorage.removeItem(key);window.localStorage.removeItem(key+'TimeStamp');}
removeLocal(key) //删除对应的参数及过期参数
tips:获取对应的参数之前,比对对应的过期参数的时间戳与当前时间戳,如果过期则删除对应的参数以及过期参数,否则返回参数值
function getLocal(key){let now_timestamp = (new Date()).valueOf();let key_timestamp = window.localStorage[key+'TimeStamp'];if(now_timestamp > key_timestamp){removeLocal(key);return undefined;}else{return window.localStorage[key];}}
getLocal(key) //获取指定的参数值
tips:将封装好的参数添加到全局变量里面,再置于闭包里面
(function(){function getUrlParam(){//...}function getFormatDate(){//...}function setLocal(key,value,expire){//...}function removeLocal(key){//...}function getLocal(key){//...}window.util = {'getUrlParam': getUrlParam,'getFormatDate': getFormatDate,'setLocal': setLocal,'getLocal': getLocal,'removeLocal': removeLocal};console.log(window.util); //输出对应变量})();
window.util[str]或window.util.方式调用指定方法