JavaScript列表操作是同步的吗?

JavaScript列表操作是同步的吗?,javascript,arrays,asynchronous,Javascript,Arrays,Asynchronous,所以我一直在研究JavaScript实际上是单线程的,尽管它看起来是多线程的(或者至少我是这样理解的),我想知道是否可以保证在调用其他函数之前完成以下函数 我很确定是这样,但是对push()的调用让我担心,当调用它时,可能会先执行其他函数。话虽如此,我想不出任何长时间运行的代码会在push()中运行 所有方法,包括推送,都是同步的。这几乎是JS中所有操作的默认值,异步是例外,并记录在每个这样的函数中。如果函数是异步的,它通常将回调函数作为参数,或者返回一个承诺或类似的东西 这样,您将始终能够确保

所以我一直在研究JavaScript实际上是单线程的,尽管它看起来是多线程的(或者至少我是这样理解的),我想知道是否可以保证在调用其他函数之前完成以下函数

我很确定是这样,但是对
push()
的调用让我担心,当调用它时,可能会先执行其他函数。话虽如此,我想不出任何长时间运行的代码会在
push()
中运行


所有方法,包括
推送
,都是同步的。这几乎是JS中所有操作的默认值,异步是例外,并记录在每个这样的函数中。

如果函数是异步的,它通常将回调函数作为参数,或者返回一个
承诺或类似的东西

这样,您将始终能够确保在函数终止后执行代码,如果这是您想要的


所以要回答您的问题:推送是同步的!:)

阵列推送方法是同步的。我强烈建议观看,以了解幕后发生的事情


如果您看了足够多的时间,它应该会澄清javascript中“单线程即使看起来是多线程的”部分是如何工作的。或者它可能会让你更加困惑,但嘿,这是你的javascript

Javascript中的所有内容都是同步的。它的行为和外观可能是异步的,但这是因为javascript中的所有内容都放在执行堆栈中。一旦完成某件事,它就会从堆栈中弹出

如果您有一个事件,它将被推送到一个事件循环中。一旦所有内容都从执行堆栈中弹出,它将搜索事件循环以查看是否有任何内容要运行。如果是,那么它将运行该事件。它看起来可能是异步的,但实际上不是


因此,总结而言。Javascript是同步的

我们不知道this
是什么,也不知道this.addChild是如何调用的,但是剩下的代码,用括号访问成员并推送到数组,肯定是同步的。基本上,在客户端jsp中只有计时器、ajax和其他请求是异步的,这段代码中没有任何异步的东西。“如果函数是异步的,它通常将回调函数作为参数”-这不是一个好的指标。例如,
Array.prototype.sort
Array.prototype.forEach
都将函数作为参数,但都是同步的。是的,但是如果您查看任何类型的文档,或者只是大致了解这些函数是如何工作的(您必须这样做,才能使用它们),您就会知道,这些函数参数不是回调,具有完全不同的用途。我没有说“每当函数被解析为参数时,它就是回调函数”;)
// adds a new node to children, after checking if its UID is not in childrenAdded
this.addChild = function(newChild) {
    if (!_this._childrenAdded[newChild.uid]) {
        _this._childrenAdded[newChild.uid] = true;            
        _this._children.push(newChild);
    }
}