所以我一直在研究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);
}
}
答案 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!