Javascript只运行一次代码
我只希望我的JavaScript运行一次,但我无法控制JavaScript文件的执行次数。基本上,我正在将一个小小的JS代码片段写入CMS,CMS实际上会调用它5-10次。所以像这样的解决方案: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(); 似乎不起作用
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
执行操作
doalert(1)
和alert(2)
,您将只看到2。对我来说不重要(他们都一样),但很迷人anyways@Hamy-我的解决方案会起相反的作用。只有第一个声明的函数才会运行。@Hamy,如果代码生成到将要发生的相同
块中;但是,如果有多个
块,它将运行第一个脚本中的最后一个。JavaScript中的函数声明总是被视为出现在其封闭范围的最顶端。“我不知道如何说‘这个变量还存在吗?’”——通常是通过var foo=window.foo |{}