Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript只运行一次代码_Javascript - Fatal编程技术网

Javascript只运行一次代码

Javascript只运行一次代码,javascript,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(); 似乎不起作用

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

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

使用闭包并设置标志。如果标志为
true
,只需返回:

if ( ! window.never_called_again  ) {
    window.never_called_again = (function () {
        var ran = false;
        return function (args) {
            if ( ran ) return;
            ran = true;
            // Do stuff
        };
    }());
}
这是小提琴:

试试这个:

var doneTheStuff;
function whatever() {
  if (!doneTheStuff) {
    doneTheStuff = true;
    // do the stuff
  }
}
冗余变量声明不会影响变量的值。一旦其中一个函数将变量设置为
true
,其他函数将不会执行任何操作

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

typeof
检查让您了解全局变量尚未声明的事实。如果(!window.code\u发生了),您也可以执行
,因为未定义的属性不禁止访问属性。

对于jQuery,函数.one()可能很有用:


W3School示例:

但是如果在JavaScript的两个单独的位中出现这种情况,它也会有同样的问题。如果我理解OP的描述,整个文件会被执行多次,包括定义函数。这是一个更真实的表示,它确实被多次调用:。正如其他人指出的,我更像mellamokb的评论,所以这似乎不起作用;-)我错过了。我更新了我的答案@Pointy更简洁,但引入了一个额外的全局变量。很有效!后续问题-它似乎运行了上次声明的函数,例如make
执行操作
do
alert(1)
alert(2)
,您将只看到2。对我来说不重要(他们都一样),但很迷人anyways@Hamy-我的解决方案会起相反的作用。只有第一个声明的函数才会运行。@Hamy,如果代码生成到将要发生的相同
块中;但是,如果有多个
块,它将运行第一个脚本中的最后一个。JavaScript中的函数声明总是被视为出现在其封闭范围的最顶端。“我不知道如何说‘这个变量还存在吗?’”——通常是通过
var foo=window.foo |{}