索鸟网

  1. 首页
  2. 只执行一次的函数

只执行一次的函数


函数执行的次数的控制

 1. 使用闭包
 function wrapFn(fn,count,context){
    count = +count || 1;   
    return function(){ // 匿名函数的参数
        if( typeof fn == 'function' && typeof count === 'number' ){
            result = fn.apply( context || this, arguments );
            if( count-- < 2 ){
                fn = null; count = null;
            }
            return result;
        }
    };
}
函数参数说明:
(1) fn,待执行的函数
(2) count,函数的执行次数,必须是数字类型,
(3) coutext,作用域。
   需要指出的是,函数count没有0次的概念,函数至少执行一次。0次不执行,没有任何意义。
   另外也没有无限次的概念,无限次直接调用就好了无需使用该函数。
(4) 调用 :
var fn = wrapFn(function( a, b ){
    return a + b;
},4);


 2. 函数重写
 在这里只提供一下思路
 function wrapFn(){
    var param = arguments[ arguments.length-1 ];
    if( typeof  param === 'number' ){
        if( param-- < 1 ){
            wrapFn = function(){};
        } 
    }
 }
 在最后一个参数中设置次数,当次数满足后就会重写函数本身,
 函数被重写后是一个空函数,这样也能控制函数执行的次数。
 
 这两种方式均可以实现在一些循环条件中的函数执行次数,避免了因为循环语句,
 多次调用和执行函数


javascript

来源地址:https://segmentfault.com/a/1190000010865906 版权归作者所有!

相关教程

  • 关于timer.schedule只执行一次

    学习做安卓项目时需要使用Timer来定时,但发现只执行一次 Timer 的schedule方法是有重载的 1.schedule(TimerTask task, long delay) 这个方法第二个参数是延迟,也就是延迟多少时间后执行task,而不会重复         2.schedu
  • 立即执行函数

    const getOS = (() => { return () => { console.log("sisi"); } })() 这种情况下,getOS的值是 () => { return () => { console.log("sisi"); }
  • 剑指offer-数组中只出现一次的数字

    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 function FindNumsAppearOnce(array) { // write code here // return list, 比如[a,b],其中ab是出现一次的两个数字 var list=[]; for(var i=0;i&l
  • 剑指offer 35 第一个只出现一次的字符

    题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 思路 哈希,水题。 代码 # -*- coding:utf-8 -*- class Solution: def FirstNotRepeatingChar(self, s): # write code here
  • js中的自执行函数

    如何让一个函数的在页面加载时就执行,嗯 (function myfun(param){ alert(param); })("hello world!"); 就这样,myfun();这个函数就可以不用特意去调用了,其实没什么意思,大家看看就ok啦!
  • 剑指offer_数组---数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 解题思路 首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。 这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我们想到了异或运算的性质:任何一个数字异
  • 2.函数预处理与执行

    函数预处理阶段步骤:     每调用一次,产生一个LexicalEnvironment     先函数的参数     内部声明式函数     内部var变量     冲突情况与全局处理一样
  • JavaScript匿名自执行函数的定义

    JavaScript匿名自执行函数的定义 取反匿名自执行函数 这段代码: !function (a) { alert(a); }("abcdefg!!!!"); 与下面这段代码作用相等。 (function (a) { alert(a); })("abcdefg!!!!");