js只執(zhí)行1次的函數(shù)示例
在我們?nèi)粘i_(kāi)發(fā)的時(shí)候,經(jīng)常會(huì)碰到一種這樣的情況:想讓某個(gè)函數(shù)只執(zhí)行一次,特別是在一些循環(huán)或定時(shí)執(zhí)行的時(shí)候。
廢話(huà)不多說(shuō),直接上代碼:
function runOnce(fn, context) { //控制讓函數(shù)只觸發(fā)一次
return function () {
try {
fn.apply(context || this, arguments);
}
catch (e) {
console.error(e);//一般可以注釋掉這行
}
finally {
fn = null;
}
}
}
// Usage 1:
var a = 0;
var canOnlyFireOnce = runOnce(function () {
a++;
console.log(a);
});
canOnlyFireOnce(); //1
canOnlyFireOnce(); // nothing
canOnlyFireOnce(); // nothing
// Usage 2:
var name = "張三";
var canOnlyFireOnce = runOnce(function () {
console.log("你好" + this.name);
});
canOnlyFireOnce(); //你好張三
canOnlyFireOnce(); // nothing
// Usage 3:
var obj = {name: "天涯孤雁", age: 24};
var canOnlyFireOnce = runOnce(function () {
console.log("你好" + this.name);
}, obj);
canOnlyFireOnce(); //你好天涯孤雁
canOnlyFireOnce(); // nothing
因?yàn)榉祷睾瘮?shù)執(zhí)行一次后,fn = null將其設(shè)置未null,所以后面就不會(huì)執(zhí)行了。再貼一個(gè)網(wǎng)上別人分享的代碼,道理一樣的:
function once(fn, context) {
var result;
return function() {
if(fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result;
};
}
// Usage
var canOnlyFireOnce = once(function() {
console.log('Fired!');
});
canOnlyFireOnce(); // "Fired!"
canOnlyFireOnce(); // nothing
以上就是為大家整理讓javascript只執(zhí)行一次的函數(shù)示例,有需要的可以參考。
- 淺談JavaScript中運(yùn)算符的優(yōu)先級(jí)
- js 與或運(yùn)算符 || && 妙用
- javascript typeof的用法與typeof運(yùn)算符介紹[詳細(xì)]
- JS中三目運(yùn)算符和if else的區(qū)別分析與示例
- js的邏輯運(yùn)算符 ||
- Javascript 按位取反運(yùn)算符 (~)
- javascript三元運(yùn)算符用法實(shí)例
- js利用與或運(yùn)算符優(yōu)先級(jí)實(shí)現(xiàn)if else條件判斷表達(dá)式
- JavaScript中常用的運(yùn)算符小結(jié)
- js定時(shí)器(執(zhí)行一次、重復(fù)執(zhí)行)
- js 程序執(zhí)行與順序?qū)崿F(xiàn)詳解
- 如何讓頁(yè)面加載完成后執(zhí)行js
- 頁(yè)面加載完后自動(dòng)執(zhí)行一個(gè)方法的js代碼
- js函數(shù)setTimeout延遲執(zhí)行的簡(jiǎn)單介紹
- 頁(yè)面加載完成后再執(zhí)行JS的jquery寫(xiě)法以及區(qū)別說(shuō)明
- window.addEventListener來(lái)解決讓一個(gè)js事件執(zhí)行多個(gè)函數(shù)
- js 把字符串當(dāng)函數(shù)執(zhí)行的方法
- Js中setTimeout()和setInterval() 何時(shí)被調(diào)用執(zhí)行的用法
- JS實(shí)現(xiàn)判斷滾動(dòng)條滾到頁(yè)面底部并執(zhí)行事件的方法
相關(guān)文章
微信小程序?qū)崿F(xiàn)星級(jí)評(píng)價(jià)效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)星級(jí)評(píng)價(jià)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
layer.alert回調(diào)函數(shù)執(zhí)行關(guān)閉彈窗的實(shí)例
今天小編就為大家分享一篇layer.alert回調(diào)函數(shù)執(zhí)行關(guān)閉彈窗的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
JS實(shí)現(xiàn)合并json對(duì)象的方法
這篇文章主要介紹了JS實(shí)現(xiàn)合并json對(duì)象的方法,涉及javascript遞歸調(diào)用與json格式數(shù)據(jù)遍歷的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
javascript實(shí)例--教你實(shí)現(xiàn)撲克牌洗牌功能
我們一般都會(huì)按照順序把隨機(jī)摸過(guò)來(lái)的牌從小到大的順序在手上理整齊(記得小時(shí)候打牌兩副牌手都抓不過(guò)來(lái)),這篇隨筆就是想通過(guò)實(shí)現(xiàn)這個(gè)功能來(lái)熟悉下js中排序數(shù)組等相關(guān)知識(shí)。2014-05-05
HTML中不支持靜態(tài)Expando的元素的問(wèn)題
HTML中不支持靜態(tài)Expando的元素的問(wèn)題...2007-03-03
詳解如何通過(guò)JavaScript實(shí)現(xiàn)函數(shù)重載
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)JavaScript實(shí)現(xiàn)函數(shù)重載,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript有一定的幫助,感興趣的可以了解一下2023-01-01
JavaScript實(shí)現(xiàn)五種不同煙花特效
這篇文章主要給大家?guī)?lái)五個(gè)好看的基于 HTML+CSS+JS 的煙花特效,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript有一定的幫助,需要的可以參考一下2022-01-01
微信小程序生成海報(bào)分享朋友圈的實(shí)現(xiàn)方法
利用微信強(qiáng)大的社交能力通過(guò)小程序達(dá)到裂變的目的,拉取新用戶(hù)。下面小編給大家?guī)?lái)了微信小程序生成海報(bào)分享朋友圈的實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧2019-05-05

