Javascript初始化关闭

时间:2012-01-21 06:10:16

标签: javascript

我试图创建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%确定我没有正确设置内部变量。如何修复代码?

4 个答案:

答案 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