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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發布時間:2023/12/13 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巧用apply让javascript函数仅执行一次 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

obj.triggerOnce?
=?function(fn)?{?//控制讓函數只觸發一次
????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);//正式平臺上可能需要注釋掉該行
????????}
????????
finally?{
????????????fn?
=?null;
????????}
????}
}

調用形式:


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

var?fn=obj.triggerOnce(showMsg);
fn(
1);//只執行一次
fn(2);//沒有調用fn

?最后,關于javascript的apply方法,您可以簡單參考這篇舊文。

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

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

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

Request.QueryString?
=?function(name)?{//取對應的鍵值
????var?key?=?name.toString().toLocaleLowerCase();?//不區分大小寫
????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);?//添加
????????}
????}
}
測試函數如下:
代碼 //測試函數
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));
}

需要說明的是,url里的參數通常都會有編碼,本文采用的是比較常用的unescape進行解碼,實際上,關于url參數編碼,通常有escape,encodeURIComponent和encodeURI這三種編碼函數,escape是window對象的內置函數,而另外兩種則是javascript內置函數,它們解碼的函數也是一一對應的關系(您可以參考這一篇),各自對應的反轉函數分別是unescape,decodeURIComponent和decodeURI。

轉載于:https://www.cnblogs.com/jeffwongishandsome/archive/2010/06/15/1671585.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。