javascript - 使用此 javascript 获取无限调用堆栈

标签 javascript asynchronous infinite-loop

我有:

var c = {
    typeStart: function(msg, loc) {
        loc.append("<p>");
        this.typeLetter(msg, loc, 0);
    },

    typeLetter: function(msg, loc, pos) {
        loc.append(msg.charAt(pos));
        pos = pos + 1;
        if (pos == msg.length) { this.typeEnd(loc); }
        setTimeout(this.typeLetter(msg, loc, pos), 100);
    },

    typeEnd: function(loc) {
        loc.append("</p>");
    }
}

c.typeStart("hello", $("#somediv"));

出于某种原因,我显然错过了一些东西,typeLetter 被无限调用。我认为这与 javascript 的异步特性有关。

最佳答案

这是你的问题:

typeLetter: function(msg, loc, pos) {
    loc.append(msg.charAt(pos));
    pos = pos + 1;
    if (pos == msg.length) { this.typeEnd(loc); }
    setTimeout(this.typeLetter(msg, loc, pos), 100);
},             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

该函数将被调用,结果将被传递到setTimeout。您需要将其包装在匿名函数中:

setTimeout(function() {
    this.typeLetter(msg, loc, pos);
}, 100);

关于javascript - 使用此 javascript 获取无限调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290368/

相关文章:

javascript - 如何处理这些异步函数(设计模式?)

javascript - 将输入元素绑定(bind)到 JavaScript 对象

javascript - 如何延迟 javascript 警报直到操作完成

javascript - 如何为 Node.js 编写异步函数

java - 杀死java中的无限循环线程

javascript - 使用 javascript 异步加载时,我该如何替换 document.write ?

javascript - 让代码等待 AJAX 请求完成

asynchronous - 两个协程同时调用一个函数两次

python - 无尽的 while 循环困惑

swift - viewDidApper 时调用可重复任务