Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:重复函数_Javascript - Fatal编程技术网

Javascript:重复函数

Javascript:重复函数,javascript,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

我有一个内置
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
            }
        });
    };

如果函数内的
self
与函数外的
相同,则只需:

} 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(及更早版本)上;如果你经常这样做,结果就是浪费。(不过,在这种特殊情况下,它不会产生任何其他影响;它仍然有效。在其他情况下,它也会产生影响,所以我完全不使用需要处理IE8的NFE代码。)

试试这个

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();
        }
    });
};

有什么问题吗?只需再次调用函数。@FrédéricHamidi问题是不知道如何在函数内部执行它