Javascript:重复功能

时间:2014-05-19 10:20:08

标签: javascript

我的内部有一个if函数。如果if返回false我需要重复执行功能

this.reloadComment = function () {
        var previous_comment = self.Comment();
        $.getJSON(Routes.my_service_search_path(self.ID), {}, function (data) {
            if (data.Comment.ID != previous_comment.ID) {
                self.Comment(data.Comment);
            } else {
                // repeat
            }
        });
    };

2 个答案:

答案 0 :(得分:1)

如果函数中的selfthis不在其中,那么只需:

} else {
    // repeat
    self.reloadComment();
}

如果没有,请使用命名函数;然后,因为你有一个好的名字,你可以使用,当你需要重复它时调用它:

function reloadComment() {
    var previous_comment = self.Comment();
    $.getJSON(Routes.my_service_search_path(self.ID), {}, function (data) {
        if (data.Comment.ID != previous_comment.ID) {
            self.Comment(data.Comment);
        } else {
            // repeat
            reloadComment();
        }
    });
}
this.reloadComment = reloadComment;

如果您不需要支持IE8,可以使用一个名为的函数表达式来执行此操作:

this.reloadComment = function reloadComment() {
    var previous_comment = self.Comment();
    $.getJSON(Routes.my_service_search_path(self.ID), {}, function (data) {
        if (data.Comment.ID != previous_comment.ID) {
            self.Comment(data.Comment);
        } else {
            // repeat
            reloadComment();
        }
    });
};

...但是在IE8(及更早版本)you'd end up with two copies of that function, not one;如果你做了很多,最终会浪费。 (但在这个特殊情况下不会产生任何其他差异;它仍然可以正常工作。还有其他情况, 会产生影响,所以我完全避免使用需要处理IE8的代码中的NFE。)

答案 1 :(得分:1)

试一下

this.reloadComment = function () {
    var me = this;
    var previous_comment = self.Comment();
    $.getJSON(Routes.my_service_search_path(self.ID), {}, function (data) {
        if (data.Comment.ID != previous_comment.ID) {
            self.Comment(data.Comment);
        } else {
           me.reloadComment();
        }
    });
};