Javascript运行一次代码

时间:2013-01-23 00:29:58

标签: javascript

我只希望我的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();

似乎没有用,因为只要从顶部再次运行我的代码片段,就会重新声明该函数,并重新评估“do some stuff”。也许我只是没有正确地做到这一点,我对JS不太好。我正在考虑在全局变量上使用类似try-catch的东西,比如

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

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

4 个答案:

答案 0 :(得分:22)

试试这个:

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

冗余变量声明不会影响变量的值。一旦其中一个函数将变量设置为true,其他函数就不会执行任何操作。

答案 1 :(得分:3)

if (typeof code_happened === 'undefined') {
  window.code_happened = true;
  // Your code here.
}

typeof检查可以了解全球尚未宣布的事实。你也可以if (!window.code_happened),因为对于未定义的属性,属性访问不被禁止。

答案 2 :(得分: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/

答案 3 :(得分:2)

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

W3School例如:http://www.w3schools.com/jquery/event_one.asp