js防止重复触发事件

调用函数

以前作项目的过程当中,为了防止用户重复点击事件,每每在每个函数里写一个flag来作判断,可是这样的方式会致使代码冗余,因此借助 函数里arguments.callee ,写了一个函数,以下:函数

// 防重复触发
stopReapeatEvent=function (obj) {
    if (obj.callFlag) return true;
    obj.callFlag=!obj.callFlag;
    clearTimeout(obj.iTime);
    obj.iTime=setTimeout(function(){
        obj.callFlag=!obj.callFlag;
    }, 1000);
}

调用的时候也很简单,code

//调用
if(stopReapeatEvent(arguments.callee))  return ;

原理:补充 caller 和 callee 知识点

caller:

返回一个对函数的引用,该函数调用了当前函数。对象

functionName.caller递归

functionName 对象是所执行函数的名称。事件

说明:对于函数来讲,caller 属性只有在函数执行时才有定义。 若是函数是由 Javascript 程序的顶层调用的,那么 caller 包含的就是 null 。ip

callee:

返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。io

[function.]arguments.callee
可选项 function 参数是当前正在执行的 Function 对象的名称。function

说明匿名函数

callee 属性的初始值就是正被执行的 Function 对象。原理

callee 属性是 arguments 对象的一个成员,它表示对函数对象自己的引用,这有利于匿名函数的递归或者保证函数的封装性。而该属性仅当相关函数正在执行时才可用。还有须要注意的是callee拥有length属性,这个属性有时候用于验证仍是比较好的。arguments.length是实参长度,arguments.callee.length是形参长度,由此能够判断调用时形参长度是否和实参长度一致。

求指正,谢谢!

相关文章
相关标签/搜索