仅使用一次功能

时间:2015-04-04 22:33:44

标签: javascript

快速提问。我试图使这个功能只工作一次,但它一直被调用。我怎么能告诉它在第一次执行后停止工作?

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";
        }
    }
}

2 个答案:

答案 0 :(得分:0)

它无法循环,没有循环块。必须从其他地方多次调用它。

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

答案 1 :(得分: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);

但是,我只会建议您在无法控制函数被调用的次数的情况下。