只執行一次的js 函數。

來源:互聯網
上載者:User

標籤:not   catch   返回   color   contex   控制   cat   nbsp   sage   

function runOnce(fn, context) { //控制讓函數只觸發一次    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(); //1canOnlyFireOnce(); // nothingcanOnlyFireOnce(); // 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

因為返回函數執行一次後,fn = null將其設定未null,所以後面就不會執行了。

方法2:

function once(fn, context) {     var result;     return function() {         if(fn) {            result = fn.apply(context || this, arguments);            fn = null;        }         return result;    };} // Usagevar canOnlyFireOnce = once(function() {    console.log(‘Fired!‘);}); canOnlyFireOnce(); // "Fired!"canOnlyFireOnce(); // nothing

 

只執行一次的js 函數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.