本地Javascript代码是如何执行的?

本地Javascript代码是如何执行的?,javascript,execution,Javascript,Execution,我正在开发一段本地(没有服务器,没有ajax)代码,它执行“繁重”的计算和可视化表示。因此,我不断增长的问题是:在前几行代码完成之前,代码片段将不断执行!这简直让我受不了,我读过,读过,读过,读过,读过,关于回调,承诺,但除非我头脑清醒,否则它似乎不适用于我的上下文,我无法理解Javascript的执行流程是如何工作的 如果我从加载在html文件头部的.js文件中调用3个函数,如下所示: FirstFunction(lenghtOfDataset); // creates a complex a

我正在开发一段本地(没有服务器,没有ajax)代码,它执行“繁重”的计算和可视化表示。因此,我不断增长的问题是:在前几行代码完成之前,代码片段将不断执行!这简直让我受不了,我读过,读过,读过,读过,读过,关于回调,承诺,但除非我头脑清醒,否则它似乎不适用于我的上下文,我无法理解Javascript的执行流程是如何工作的

如果我从加载在html文件头部的.js文件中调用3个函数,如下所示:

FirstFunction(lenghtOfDataset); // creates a complex array of arrays of objects (about 10,000 elements)
SecondFunction (Dataset); // renders a D3.js svg visualization based on the dataset (about 1,000 elements)
ThirdFunction (Dataset); // creates an html table by using jQuery .append (bad, I know) using the same dataset (around 10,000 elements)
现在,为什么,为什么第三个函数中的代码在第一个函数完成执行之前就被执行?(当然,会导致“未定义”错误)

另一个让我抓狂的例子是:

$("#my-table").append("<thead><tr>");
for (i=FirstNumber; i<=LastNumber; i++) { // about 1000 elements
    $("#my-table").append("<th>" + i + "</th>");
    }   
$("#my-table").append("</tr></thead>");
$(“#我的表格”)。追加(“”);

对于(i=FirstNumber;i您的第一个示例可能是异步处理js D3.js的问题,正如我们在评论中提到的

您的第二个示例无效。您不能使用append插入部分HTML

以下是一个有效的方法:

var$tHead=$(“#myHead”),
$headerRow=$(“”);

对于(var i=0;i这不是关于Javascript,而是关于jQuery。jQuery遵循功能设计模式,异步执行。它以什么顺序执行并不重要,您也不应该在意。您最好习惯它,因为异步是所有浏览器的工作方式。@RobertHarvey我只是无意中删除了它这是我的评论。我之前提到的链接,我相信你可以从这里获得一些额外的信息:。@RobertHarvey嗯,有时候顺序很重要,如果不是,编程就不可能了,即使是函数式的。你不能在jQuery中附加部分html。你看到的是jQuery试图修复你的非法代码HTML-以下是如何正确执行的:不是。他的代码无效谢谢你纠正我的无效代码!它肯定会有用,但这仍然不能回答我的存在性问题。d3可能使用异步执行-请参阅发布的指向其他答案的链接-JS是单线程的,除非在异步回调中延迟执行如果我理解这一点,D3和jQuery将使用异步执行,因此我必须在不使用任何库/工具的情况下编写Javascript,才能使我的代码同步执行?听起来像一场噩梦;)不,你不需要。你需要了解他们在哪里使用它。你所做的追加不是异步的。它只是有一个副作用,在追加之前关闭你的tr-你需要向我们展示你的代码,我们可以帮助你在正确的位置执行函数。有趣的是,thanx。屏幕缓冲区和浏览器。这解释了为什么我一直需要在etTimeout(函数重载计算,300)在显示“等待覆盖”之后,否则覆盖没有时间显示。但它仍然无法解释为什么第一个函数中的var MyVar=345在第三个函数执行之前(我问题中的示例)仍然无法通过。我将尝试设置一个这种行为的小把戏。
$("#working-overlay").css("display", "block");
for (var i = 1; i <= 10000; i++) {              
        Number[i] = {};
        Number[i].value = i;
        Number[i].divisors = DivisorsOf(i); // I have a function that calculates divisors   
        Number[i].factors = FactorsOf(i); //// I have a function that calculates factors
}
$("#working-overlay").css("display", "none");