如何在不设置全局变量的情况下确定是否调用了函数

我正在寻找一种好的技术来摆脱我想要做的事情:设置一个全局变量。

有人第一次通过单击按钮来运行某个function时会触发一个初始function,将一些东西变成可拖动的东西。 稍后,如果他们第二次单击该按钮,我想确定init函数是否已初始化,如果是,则不再调用它。 我可以通过从init函数设置一个全局变量然后从click函数中检查该变量来轻松完成此操作,但我想知道如何在不设置全局变量的情况下执行此操作。 我真的想要一个这样做的方法的例子。

您可以向函数添加属性:

 function init() { init.called = true; } init(); if(init.called) { //stuff } 

虽然@Levi的答案应该很好,但我想提出另一个选择。 你会过度编写init函数,一旦调用它就什么都不做。

 var init = function () { // do the initializing init = function() { return false; } }; 

第一次调用时的函数将执行init。 然后它会立即覆盖自己,以便在下次调用时返回false。 第二次调用函数时,函数体只包含return false。

欲了解更多信息, 请访问 : http : //www.ericfeminella.com/blog/2011/11/19/function-overwriting-in-javascript/

你为什么不检查一下你的拖拉机是否有可拖动的类?

 if ($('.mydiv').is('.draggable')) { //do something } 
 Function.prototype.fired = false; function myfunc() { myfunc.fired = true; // your stuff }; console.log(myfunc.fired) // false myfunc(); console.log(myfunc.fired) // true 

你可以做的是取消原型中的init函数。

 ​var Obj = function () { this.init = function () { document.write("init called
"); this.init = null; } } var o = new Obj(); if (o.init) document.write("exists!
"); o.init(); if (o.init) document.write("exists!
"); o.init();

第一个if是真的并且打印exists! 但由于该函数自行删除,第二个if将失败。 在我的例子中,我无条件地调用第二个init只是为了表明什么都不会发生,但当然只有存在才能调用它:

 if (o.init) o.init(); 

http://jsfiddle.net/coreyog/Wd3Q2/