12

我只希望我的 JavaScript 运行一次,我无法控制 JavaScript 文件执行的次数。基本上我正在将一个小的 JS 片段写入 CMS,而 CMS 实际上会调用它 5-10 次。所以像这样的解决方案:

function never_called_again(args) {
  // do some stuff
  never_called_again = function (new_args) {
   // do nothing
  }
}
never_called_again();

似乎不起作用,因为一旦我的代码片段从顶部再次运行,该函数就会重新声明,并重新评估“做一些事情”。也许我只是做得不好,我对 JS 不是很好。我正在考虑在全局变量上使用类似 try-catch 的东西,比如

if (code_happened == undefined) {
    \\ run code
     code_happened = true;
}

编辑:有一个一致的状态,例如,如果我设置一个变量,我可以在我的代码片段再次运行时看到。但是在我访问它之前必须声明它,我不知道怎么说'这个变量是否存在'

4

4 回答 4

28

试试这个:

var doneTheStuff;
function whatever() {
  if (!doneTheStuff) {
    doneTheStuff = true;
    // do the stuff
  }
}

冗余变量声明不会影响变量的值。一旦其中一个函数将变量设置为true,其他函数将不会做任何事情。

于 2013-01-23T00:37:48.803 回答
7
if (typeof code_happened === 'undefined') {
  window.code_happened = true;
  // Your code here.
}

typeof检查让您了解全局尚未声明的事实。您也可以这样做,if (!window.code_happened)因为未定义属性不会禁止属性访问。

于 2013-01-23T00:42:29.333 回答
2

使用闭包,并设置一个标志。如果标志是true,则返回:

if ( ! window.never_called_again  ) {
    window.never_called_again = (function () {
        var ran = false;
        return function (args) {
            if ( ran ) return;
            ran = true;
            // Do stuff
        };
    }());
}

这是小提琴:http: //jsfiddle.net/U2NCs/

于 2013-01-23T00:32:21.763 回答
2

使用 jQuery,函数 .one() 可能有用:http ://api.jquery.com/one/

W3School 示例在这里:http ://www.w3schools.com/jquery/event_one.asp

于 2015-12-24T08:20:22.473 回答