当前位置: 代码迷 >> JavaScript >> 是什么导致我的jQuery调用递归?
  详细解决方案

是什么导致我的jQuery调用递归?

热度:64   发布时间:2023-06-05 10:31:08.0

我目前编写了一些代码,这些代码将在自定义.trigger()调用之后调用一个函数。 这就是所谓的:

function _visitAddTag(state, listener) {
        if (state.properties.action = "RedoAddTag") contextMenu.unhide();
        var $target = contextMenu.getContextMenuUI().tags; // Grab tag elements
        var callback = function () {
            if (listener) {
                google.maps.event.removeListener(listener);
            }
            $target.off("tagIds-updated", callback);
            contextMenu.hide();
            next.call(contextMenu.getTargetLabel(), state.transition);
        };
        $target.on("tagIds-updated", callback());
    }

next.call()行导致触发此方法:

function () { // 'this' is contextMenu.getTargetLabel(), as called in Onboarding.js/_visitAddTag()
                tracker.push('Onboarding_Transition', {onboardingTransition: "tag-attribute-1"});
                var tags = this.getProperty('tagIds');
                return tags == [2] ? "adjust-heading-angle-1" : "redo-tag-attribute-1" // Where 2 is the tag_id of the "points into traffic" tag
            }

返回值"redo-tag-attribute-1"将导致整个事件再次循环。

我在这里看到了递归的可能性,尤其是如果在第二个函数调用中以某种方式触发了"tagIds-updated"事件时。 但是,当我调试代码时,该事件仅触发一次。 有人对这里发生的事情有任何想法吗? 我是javascript新手,所以也许我缺少明显的东西。

我无法完全绕过代码。 我目前在您的代码中看到2个问题:

  1. $target.on("tagIds-updated", callback()); 并没有真正附加事件处理程序。 它只是立即调用callback 您需要$target.on("tagIds-updated", callback); 请注意缺少的()
  2. tags == [2]将始终为false 您可能可以改用tags.includes(2) 就目前而言,该函数将始终返回"redo-tag-attribute-1" 这可能是您面临此递归的根本原因。
  相关解决方案