Javascript forEach循环操作和执行顺序

Javascript forEach循环操作和执行顺序,javascript,performance,function,foreach,Javascript,Performance,Function,Foreach,这可能是一个初学者的问题,但我担心全局对象将如何更新。我会展示我在做什么,然后谈谈我的担忧 (function() { var obj = {}; var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { //do whatever with the mutation //updat

这可能是一个初学者的问题,但我担心全局对象将如何更新。我会展示我在做什么,然后谈谈我的担忧

(function() {
    var obj = {};
    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            //do whatever with the mutation
            //update the obj variable
        });
    });
    observer.observe(target, config);
})();
我担心的是,当突变会很快地连续出现时,我能保证第一批突变会在进入下一批之前完成它们的过程吗?我想我理解闭包是如何工作的,但我不认为这是我需要的。我在考虑将每一批变异传递给一个函数,也许创建一个队列,并以这种方式进行处理……这是一种更好的方式来确保所有事情都能按顺序进行处理吗?当每一个变异过程都将完成时,还要创建某种回调,然后继续下一个?或者,
forEach
循环为我处理这个问题吗

另外,在处理这些突变时,我认为我正在阻塞线程,因为所有事情都是同步完成的,对吗?我应该在每个变异周围使用IIFE并使用
setTimeout()
使其异步吗

(function() {
    var obj = {};
    function processMutation(mutation) {
        //do whatever with the mutation
        //update the obj variable
    }
    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            //this really isn't IIFE since forEach already is an IIFE?
            setTimeout(function() {
                //pass it to a separate function and release the forEach function
                processMutation(mutation);
            }, 0);
            //this ^ should make it async?
        });
    });
    observer.observe(target, config);
})();
这样做,每个变异是否会添加到
processMutation
函数内的堆栈中,使变异的处理异步,并允许主线程继续侦听其他变异?因为某些处理可能需要很长时间才能完成


希望这个问题不要太笼统……我想得到一些建议。

突变事件已经是异步的。进一步推迟是没有意义的
setTimeout
不能使您的处理并行。@Bergi所以我担心突变会很快出现……它们都会按照它们出现的顺序执行吗?更新是否正常?是的,会的。事件循环保证每个事件的(同步)处理将在开始下一个事件之前完成。@Bergi man…所有这些写作和思考都是徒劳的:)谢谢你让我放心!每个变异都将调用回调函数(MutationObserver构造函数的参数),回调函数可以访问该特定变异的
MutationRecords
数组。当目标上发生一系列变化时,会为每个函数调用回调,因为JavaScript是单线程的,所以每个被调用的函数都会逐个执行