有很多方法。
你需要立一个flag某处。在没有其他东西的情况下,你可以把它戴上window
,但使用不太可能与其他名称冲突的名称。
那么 JavaScript 就非常简单了:
if (!window.myUniqueNameFlag) {
window.myUniqueNameFlag = true;
// Do your processing
}
但话又说回来,把东西穿上window
如果你能避免它,那并不理想,尽管它是very常见做法。 (您在全局范围内声明的任何变量var
1 是一个属性window
,就像您在全局范围内声明的任何函数一样。)
如果您的函数已在全局范围内声明(因此已占用全局标识符/窗口属性),则可以这样做以避免创建第二个标识符。代替:
function foo() {
// ...your processing...
}
Do this:
var foo = (function() {
var flag = false;
function foo() {
if (!flag) {
flag = true;
// ...your processing...
}
}
return foo;
})();
这看起来很复杂,但事实并非如此:它定义并立即调用一个匿名函数,在该函数中定义一个变量和一个嵌套函数,然后返回嵌套函数的引用并将其分配给foo
多变的。您可以致电foo
你会得到嵌套函数。嵌套函数有一个持久的参考 to the flag
变量,因为它是一个变量的闭包 http://blog.niftysnippets.org/2008/02/closures-are-not-complicated.html,但其他人看不到它。这是完全私人的。
A third选项是只在函数对象本身上使用一个标志:
function foo() {
if (!foo.flag) {
foo.flag = true;
// ...do your processing...
}
}
函数只是具有被调用能力的对象,因此您可以为其添加属性。
1 在全局范围内声明的变量let
or const
是全局变量,但不会成为属性window
.