只执行一次的js 函数。

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(); //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

因为返回函数执行一次后,fn = null将其设置未null,所以后面就不会执行了。

方法2:

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
时间: 2024-11-07 08:58:48

只执行一次的js 函数。的相关文章

点击按钮(或超链接)如何跳转到另外一个页面并执行目标页面的js函数

页面跳转同时执行js代码$(function(){});url参数传递 标题的前半部分其实不必赘述,按钮也可以换成超链接.. 假设是需要在A页面上的一个按钮,点击后跳转到B页面,传一些参数后且并B页面的某个js函数可以执行~~ 关键在于如何跳转到目标页面之后并「接着」执行「目标页面的js函数」.原因是目标页面的某个js函数原来是需要点击该页面的按钮或超链接才能触发的,但现在需要在跳转到B页面后立即执行! 先不想是从A页面跳转到B页面,假设你想在B页面一打开就执行的话,是需要把代码逻辑写在$(fu

C#调用htmlfile组件,并执行js函数

前一篇我测试了vba调用htmlfile做反混淆,并执行js函数的代码.本文换成C#实现. 本文地址:http://www.cnblogs.com/Charltsing/p/CSharpEval.html 联系QQ:564955427 C#调用com组件需要使用CreateInstance,当然,我们也可以通过反编译vb.net里面的CreatObject来修改成C#代码.我从网上下载了一个 [SecurityPermission(SecurityAction.Demand, Unmanaged

JS函数的词法分析和执行过程

调用JS函数包括两部分在执行:1.词法分析 2.执行语句      例1:*/           function test(x,y){                  function x(){                     alert(x);                }                x();                alert(x);          }          test(100);    词法分析:    1.函数执行时候,生成Act

如何使js函数异步执行

CallbacksCallbacks使用场景在哪里?在很多时候需要控制一系列的函数顺序执行.那么一般就需要一个队列函数来处理这个问题: function Aaron(List, callback) { setTimeout(function() { var task = List.shift(); task(); //执行函数 if (List.length > 0) {  //递归分解 setTimeout(arguments.callee, 1000) } else { callback()

设计模式(1):只执行一次的函数(续)

概述 最近最近做项目的时候总会思考一些大的应用设计模式相关的问题,我把自己的思考记录下来,供以后开发时参考,相信对其他人也有用. 闭包之殇 本来上篇写的好好地,看起来逻辑也很清晰,但是实际用起来发现了一个巨大的坑.那就是,闭包中的变量将会共享!!! // utils.js export function runOnce(func) { let runOnce = true; return function(params) { if (runOnce) { func.apply(this, par

Html和JS文件未使用UTF-8编码导致部分JS函数执行不正确

昨天写Windows应用程序用的前端HTML页面时,发现了一个奇怪的问题,一段简单的JS代码,竟然执行错误. function replaceSymbol(){ var val_exp = $('#calc_expression').val(); alert(val_exp); val_exp=val_exp.replace(/(/g,'(').replace(/)/g,')').replace(/×/g,'*').replace(/÷/g,'/'); alert(val_exp); $('#c

在JS函数中执行C#中的函数、字段

1.调用字段 cs文件的代码: public int id = 0; protected void Page_Load(object sender, EventArgs e) { id = 2; } js页面的代码: function CheckFunc() { alert("<%= id%>"); } 2.调用函数: 在JS函数中访问或执行C#.NET中的函数: 在JS函数中访问C#函数方法一: 首先建立一个按钮,在后台将调用或处理的内容写入button_click中;接

(转)在网页中JS函数自动执行常用三种方法

原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   } </SCR

在网页中JS函数自动执行常用三种方法

在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   }  </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT   LANGUAG