我试图创建javascript闭包,告诉我函数是否已经运行:
这是我到目前为止所做的:
function do()
{
var isInitialized = function()
{
var init = false;
if (init == false)
{
init = true;
return false;
}
return init;
}
if (!isInitialized())
{
// do stuff
}
}
我的函数isInitialized始终计算结果为true。我90%确定我没有正确设置内部变量。如何修复代码?
答案 0 :(得分:2)
首先,您不能将do
用作that's a keyword的函数名。
其次,您可以将属性附加到您的函数中,这样您就不需要闭包或类似的东西:
function f() {
if(f.initialized)
return;
f.initialized = true;
console.log('Doing things.');
}
f();
f();
那只会给你一个“做事”。在控制台中。
演示(在JavaScript控制台打开的情况下运行):http://jsfiddle.net/ambiguous/QK27D/
答案 1 :(得分:1)
函数是JavaScript中的对象,因此可以为它们分配属性,这些属性为实现您想要执行的操作提供了便利的机制:
function doit() {
if (typeof doit.isInitialized === "undefined") {
doit.isInitialized = true;
// do stuff
}
}
答案 2 :(得分:0)
试试这个:
function fn(){
if (typeof fn.hasrun!='undefined'){return;}
fn.hasrun=true;
// do stuff
}
答案 3 :(得分:0)
每次调用isinitialized
时,它都会将所有变量重置为默认值,因此init
始终为false。之后设置的值不会被转移到下一次isInitialiazed被调用。
你想要的是一个'静态'变量,JS不直接支持,但可以根据这个答案进行模拟:Static variables in JavaScript