一个JS方法成功调用过后,阻止再次调用 应该如何做?

一个JS方法成功调用过后,阻止再次调用 应该如何做?

尽量要优雅点的方式,不要用if判断的方式,可以么?

阅读 7.5k
10 个回答
//不带If
function testFunc(...args) {
  console.log(1)
  testFunc = new Function();
}

//带If,属性内聚
function testFunc() {
  if (testFunc.isCalled) return;
  console.log(1)
  testFunc.isCalled = true;
}
let hasCalled = false

function func() {
  if (hasCalled) return

  // xxxx
  hasCalled = true
}

这样?

那你只使用一次的话为什么要去定义一个方法呢 直接回调的时候去写一个不就完了吗

不用if就优雅了啊?楼主这观点有问题啊,这个还真就用if最方便,定义个全局变量
例如:

var a = 1;
var b = function(){
    if(a==1){
        console.log("a等于1,执行");
        a++;
    }
}

第一次执行有打印,第二次就没有了

lodash 有个工具函数叫 once。

可以用类似的思路去实现
OnceBefore

var onceFunc = (function(){
    //函数体
    console.log(true);
    onceFunc = false;
});
//调用
if(onceFunc){
    onceFunc();
}
(function(){
    //todo....
})()

不申明全局变量的话,就用闭包变量。或者执行完之后,删除自己(delete操作符,反正你也不用了)。。

1 if最好但是你觉得不优雅。。。
2 函数开头onclick=noop 结尾onclick=原函数
3 throttle
4 button的话可以disable属性

新手上路,请多包涵

这样刷新一次页面,还是在进行一次执行了,对于数据只要一次初始化,第二次不要在初始化就不灵了,应该这样。
function init(){

if(localStorage.initialized){};
.....
localStorage.initialized=1

}

init()

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题