2015-04-04 89 views
-3

快速问题在这里。我试图让这个函数只工作一次,但它一直被调用。我该如何告诉它在第一次执行后停止工作?只能使用一次功能

function axis_y_superior_inferior() { 
    if ((y_actual <= y_final) && (y_actual >= y_final)) { 
     var slop = (y_actual)/(x_actual); 
     var crossing_point = ((y_actual - y_final)/slop) + x_actual; 

     if ((slop > (x_origen - dimension_x)) && (crossing_point < x_final)) { 
      y_actual = y_final - y_actual;       
      y_actual = y_final + y_actual; 
      vectory = 0 - vectory; 
      document.getElementById("block").style.display = "none"; 
     } 
    } 
} 
+1

“循环”是什么意思?这个函数中没有任何循环。 – zerkms 2015-04-04 22:35:31

+0

...不要多次调用它?这听起来很像[XY问题](http://xyproblem.info/)。你能否展示实际上包含循环的部分? – JJJ 2015-04-04 22:35:36

+0

据我所见,没有回路。你在哪里打这个功能?添加一些代码。 – Igle 2015-04-04 22:35:45

回答

0

它不能循环,没有循环块。它必须从别处被多次调用。

如果您希望它只运行一次,请在该函数之外创建一个全局变量(例如,var axis_y_superior_inferior_ran = false),并在该函数结束时将其设置为true。在函数的开头,检查变量并返回它是否为真。

0

函数将在每次调用时运行。确保运行一次的最好方法是确保只调用一次。你没有提供它被调用的上下文,所以我们没有办法弄清楚为什么它会被多次执行。

你可以让你的函数只运行一次,不管它被调用的次数是多少次,每次被调用时都要记录一个变量。您可避免在封闭包裹它采取了上述可变全局命名空间:

function runOnlyNTimes(f, n) { 
    var calls = 0; 
    return (function() { 
     calls++; 
     if (calls <= n) { 
      f.apply(this, arguments); 
     } 
    }); 
} 

function axis_y_superior_inferior() { 
    if ((y_actual <= y_final) && (y_actual >= y_final)) { 
     var slop = (y_actual)/(x_actual); 
     var crossing_point = ((y_actual - y_final)/slop) + x_actual; 

     if ((slop > (x_origen - dimension_x)) && (crossing_point < x_final)) { 
      y_actual = y_final - y_actual;       
      y_actual = y_final + y_actual; 
      vectory = 0 - vectory; 
      document.getElementById("block").style.display = "none"; 
     } 
    } 
} 

axis_y_superior_inferior = runOnlyNTimes(axis_y_superior_inferior, 1); 

但是,我只会推荐本作中,你不必在函数被调用的次数控制的情况下无论出于何种原因