函数只执行一次,若再执行,直接返回上次的结果

var once  = (function(){
    var res = {}, i = 0 ;
    return function(func){
        if(typeof(func) != ‘function‘){
            alert(‘参数类型不正确‘);
            return false;
        }
        for(var j in res){
           if( res[j].fn === func ){
             console.dir(‘read from cache...‘);
             return res[j].ret;
      }
        }

        return res[i++] = {ret:func(),fn:func};
   }
})();
var a1 = function(){ return 1;}
var a2 = function(){ return 2;}
once(function(){ return 1; });
时间: 2024-10-25 11:14:52

函数只执行一次,若再执行,直接返回上次的结果的相关文章

js 闭包让函数只执行一次

js 闭包让函数只执行一次 <script>function once(f) {    var run;    return function() {        if (!run) {            run = true;            f.apply(this, arguments);        }    }}var g = once(function(x) {    alert(x)});g(1);g(2);g(3); </script> js 闭包让函

(function() {})();只执行一次

测试例子: var xx = (function() { (function() { alert(9) })(); alert(10) return "yyyy"; })(); 调用: alert(xx); 在调用的时候,你会发现只弹出"yyyy"信息,并不见弹出"10"的信息!这也就是说,这个匿名函数只在立即调用的时候执行一次,这时它已经赋予了给xx变量,也就是只是把在初始化的立即调用的结果保存起来. 看运行测试: 立即调用时,9.10信息都弹

selenium+python+unittest:一个类中只执行一次setUpClass和tearDownClass里面的内容(可解决重复打开浏览器和关闭浏览器,或重复登录等问题)

unittest框架是python自带的,所以直接import unittest即可,定义测试类时,父类是unittest.TestCase. 可实现执行测试前置条件.测试后置条件,对比预期结果和实际结果,检查程序的状态,生成测试报告. 且断言的话unittest框架很方便. 在这主要记录下setUp()和tearDown()这两个的问题,每次执行一个测试用例(test开头的方法),就会执行一次setUp()和tearDown(), 导致执行多个测试用例时,会反复的打开浏览器操作,这个很浪费时间

控制元素的点击执行事件只执行一次

if(e.handled !== true){ } e.handled=true; function(e) 完整例子: $('.shoucangtitlele').click(function(e){                if(e.handled !== true){                    var data = $(this).attr('data');                    alert(data);                    if(data

防暴力点击,一定时间内多次点击只执行一次

data() { return { clickDelay: false, } }, //1秒内点击多次只执行一次 previeWxArticle(item) { let _this = this; if(_this.clickDelay) return; _this.clickDelay = !_this.clickDelay; api.request("previeWxArticle", { 'url': item.articleUrl,'linkId': item.linkId }

保证某段代码在程序的生命周期内只执行一次

static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //要执行的代码 });

多线程访问限制某个方法只执行一次

 一.目录 环境及需求 问题 解决方案 知识点补充  二.环境及需求 每个任务都会有1万线程访问这个方法,这个方法里面又会访问验证码验证服务的方法,这样就会解开验证码限制,后续的访问达成有效访 问.然后过了一个时间单位,访问又会受限,多个线程同时请求验证码验证服务,解封后,后面的访问就会正常.这样一直循环. 因为验证码服务收费,并且解封一次后续就可正常访问.怎样让这1万个并发线程进入方法后,队列去请求验证码服务,请求成功后其它线程不访问验证码服务. 1.这里用示例程序模拟一下环境,模拟1万线程并

js scroll 滚动连续多次触发事件只执行一次

(function() { var finished = true; function loadData() { //xxxx finished = true; } dom.onscroll = function() { if(finished && this.scrollHeight - this.clientHeight == this.scrollTop) { finished = false; loadData(); } } })();

让$(window).scroll()监听事件只执行一次

可以用jQuery中的unbind()来进行事件解绑. 1 $(window).scroll(function() { 2 console.log("滚离顶部" + $(document).scrollTop()); 3 4 //... 5 6 //对window对象进行scroll事件解绑 7 $(window).unbind("scroll"); 8 }); 方法的参数如下(截图于w3school): 额外: 我在一次将scroll()和setInterval(