我只希望我的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;
}
编辑:有一致的状态,例如:如果我设置了一个变量,我可以看到我的代码片段再次运行时。但是在我访问它之前必须声明它,我不知道怎么说'这个变量是否存在'
答案 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
};
}());
}
答案 3 :(得分:2)
使用jQuery,函数.one()可能很有用:http://api.jquery.com/one/