日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

巧用apply让javascript函数仅执行一次

發(fā)布時(shí)間:2023/12/13 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巧用apply让javascript函数仅执行一次 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

RT,有時(shí)候我們只想要讓某些腳步函數(shù)執(zhí)行一次就算完成任務(wù)了。如何實(shí)現(xiàn)這種功能呢?簡(jiǎn)單模仿下面這段就可以輕松搞定了:

代碼 var?obj?=?new?Object();

obj.triggerOnce?
=?function(fn)?{?//控制讓函數(shù)只觸發(fā)一次
????return?function()?{
????????
try?{
????????????fn.apply(
this,?arguments);
????????}
????????
catch?(e)?{
????????????
var?txt?=?"There?was?an?error?on?this?page.\n\n";
????????????txt?
+=?"Error?message:?"?+?e.message?+?"\n\n";
????????????txt?
+=?"Error?name:?"?+?e.name?+?"\n\n";
????????????
//alert(txt);//正式平臺(tái)上可能需要注釋掉該行
????????}
????????
finally?{
????????????fn?
=?null;
????????}
????}
}

調(diào)用形式:


function?showMsg(arg){
???alert(arg);
}

var?fn=obj.triggerOnce(showMsg);
fn(
1);//只執(zhí)行一次
fn(2);//沒(méi)有調(diào)用fn

?最后,關(guān)于javascript的apply方法,您可以簡(jiǎn)單參考這篇舊文。

?
外一篇】用javascript取得querystring的值
在常見(jiàn)的網(wǎng)站中,經(jīng)常碰到有“XXXX.aspx?username=jeffwong&address=北京” 這種形式的url,通過(guò)asp.net的Request對(duì)象獲取鍵值輕而易舉,通過(guò)js也不是很難,用下面的函數(shù)就可以搞定了:

代碼 var?urlStrs?=?location.search;?//QueryString
var?Request?=?{};
Request.Count?
=?0;

Request.Add?
=?function(name,?value)?{
????
if?(Request.hasOwnProperty(name)?==?false)?{
????????Request.Count
++;?//如果不存在,計(jì)數(shù)添加1
????}
????Request[name]?
=?value;
????
return?true;
}

Request.QueryString?
=?function(name)?{//取對(duì)應(yīng)的鍵值
????var?key?=?name.toString().toLocaleLowerCase();?//不區(qū)分大小寫
????var?result?=?null;
????
try?{
????????
//?if?(Request.hasOwnProperty(key))?{
????????result?=?Request[key];
????????
//?}
????}
????
catch?(e)?{
????????
//alert(e.message);
????}
????
return?result;
}

Request.Init?
=?function(urlQueryString)?{
????
if?(urlQueryString.indexOf("?")?!=?-1)?{
????????
var?url?=?urlQueryString.substr(1)
????????
var?strArr?=?url.split("&");
????????
for?(var?i?=?0;?i?<?strArr.length;?i++)?{
????????????
var?strChildArr?=?strArr[i].split("=");
????????????
var?name?=?String(strChildArr[0]).toLowerCase();
????????????
var?value?=?unescape(strChildArr[1]);?//unescape解碼
????????????this.Add(name,?value);?//添加
????????}
????}
}
測(cè)試函數(shù)如下:
代碼 //測(cè)試函數(shù)
function?test()?{
????Request.Init(urlStrs);?
//初始化request
????alert(Request.Count);
????
var?name?=?"username";
????
var?value?=?Request.QueryString(name);
????alert(Request[name]);
????alert(Request.QueryString(name));

????name?
=?"address"
????alert(Request[name]);
????alert(Request.QueryString(name));

????name?
=?"age";
????alert(Request[name]);
????alert(Request.QueryString(name));
}

需要說(shuō)明的是,url里的參數(shù)通常都會(huì)有編碼,本文采用的是比較常用的unescape進(jìn)行解碼,實(shí)際上,關(guān)于url參數(shù)編碼,通常有escape,encodeURIComponent和encodeURI這三種編碼函數(shù),escape是window對(duì)象的內(nèi)置函數(shù),而另外兩種則是javascript內(nèi)置函數(shù),它們解碼的函數(shù)也是一一對(duì)應(yīng)的關(guān)系(您可以參考這一篇),各自對(duì)應(yīng)的反轉(zhuǎn)函數(shù)分別是unescape,decodeURIComponent和decodeURI。

轉(zhuǎn)載于:https://www.cnblogs.com/jeffwongishandsome/archive/2010/06/15/1671585.html

總結(jié)

以上是生活随笔為你收集整理的巧用apply让javascript函数仅执行一次的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。