JavaScript列表操作是否同步?

时间:2016-09-29 15:07:52

标签: javascript arrays asynchronous

所以我一直在研究JavaScript实际上是单线程的,即使它似乎是多线程的(或者至少是我理解它的方式),我想知道是否有以下功能将保证在调用其他函数之前完成。

我相当确定它是,但是对push()的调用让我担心,当它被调用时,其他一些函数可能会先执行。话虽如此,我无法想到将在push()中运行的任何长期运行的代码。

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

如果函数是异步的,它通常会将回调函数作为参数,或者返回s.prop5 = _satellite.getVar('currentDate');或类似的东西。

这样你总能确保你的代码在函数终止后执行,如果你想要的话。

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

答案 2 :(得分:1)

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

如果您有活动,则会将其推送到事件循环中。一旦从执行堆栈中弹出所有内容,它就会搜索事件循环以查看它是否有任何可运行的内容。如果是,那么它将运行该事件。它看起来可能是异步的,但事实并非如此。

所以,总之。 Javascript是同步的。

答案 3 :(得分:0)

Array推送方法是同步的。我强烈建议您观看this video on the javascript event loop以了解幕后发生的事情。

如果你看足够多次,它应该澄清"单线程如何看似多线程"部分JavaScript工作。或许它可能会让你更加困惑,但嘿,那就是你的javascript!

相关问题