2015-04-04 91 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); 

但是,我只會推薦本作中,你不必在函數被調用的次數控制的情況下無論出於何種原因