JavaScript 的突出特性之一(或有害,取决于您对该主题的看法)是它的异步特性。我了解代码流是如何工作的,但我并不是 100% 了解什么使异步代码“异步”。
当然,联系服务器或读取/写入数据库是一个异步操作。但是通常以非异步方式处理的东西呢?我可以编写使用回调的代码,使其全天异步。
同步示例
var arrayToIterate = [1,2,3,4,5,6,7,8,9, ... ]  
//Say this array length is in the hundreds of millions.
var addArrayContents = function(array) {
    var total = 0;
    for (var i = 0, len = array.length; i <= len; i++) {
        total = total + array[i];
    }
    return total;
};
var arrayTotal = addArrayContents(arrayToIterate);
异步示例
var arrayToIterate = [1,2,3,4,5,6,7,8,9, ... ]  
  //Say this array length is in the hundreds of millions.
var addArrayContents = function(array, callback) {
    
    var iterator = function(total, arIndex, cb) {
        if (arIndex == array.length) {
            return cb(total);
        }
        total = total + array[arIndex];
        arIndex++;
        iterator(total, arIndex, cb)
    };
    iterator(0, 0, callback);
};
addArrayContents(arrayToIterate, function(result){
    console.log(result);
    // Do stuff
});
正如你所知道的,两个函数都做同样的事情,一个是异步的,一个不是。是否有一个经验法则来决定异步而不是同步地做某事的最佳时间?在上面的示例中,同步函数在将这些数字相加时会出现问题,而异步版本在运行时不会挂起。
我只是有一种感觉,我不是 100% 理解异步性。似乎它不仅仅是查看一个函数并找出它是否使用回调。