2015-10-12 54 views
1

有一天,我在JavaScript中将此函数作为jQuery插件中对象的简单DTO编写。我假设如果我在该函数的末尾写了一条通用的return gridColumns行,则可能会在我的for循环完成填充之前返回该阵列。所以我最后写了这个while (true)声明,认为我很聪明。如何理解JavaScript的同步性/异步性

function getGridColumns() { 
     var gridColumns = []; 
     var records = $("#jqxGrid").jqxGrid("columns").records; 
     for (var i = 0; i < (records.length); i++) { 
      var obj = { 
       datafield: records[i].datafield, 
       width: records[i].width, 
       cellsalign: records[i].cellsalign, 
       hidden: records[i].hidden 
      } 
      gridColumns.push(obj); 
     } 
     while (true) { 
      if (gridColumns.length == records.length { 
       return gridColumns; 
      } 
     } 
    }; 

我的一个朋友看了我的小“黑客”,并说,这是完全没有必要的,我做了一些测试,并确定他是对的。

所以,这就是我所在的地方。 如何是JavaScript异步的,它怎么样?任何人都可以帮助我理解这种范式,以便我可以编写更好的JavaScript?

+3

当您对异步服务进行函数调用时,它是异步的。上面的代码中没有任何符合该描述。 – Pointy

+0

@Pointy,所以async必须被明确定义,否则JavaScript将同步执行? –

+0

感谢downvote,谁做到了。对于想要学习的人来说,真的很有建设性,就像我一样。 –

回答

2

是产生新的“线程”的执行,因此可以这么说引进一个异步的情况在JavaScript中的AJAX调用回调函数(除非调用专门制作synchrounous)和setInterval()setTimeout()通话最常见的机制。正如Pointy所指出的那样,这还不止于此。

+2

还有其他一些服务在浏览器中引入了异步行为,还有更多类似Node.js的环境。 – Pointy

+0

谢谢Pointy,有一种感觉,我并不是很了解这一点。更新我的答案,说“最常见”而不是“全部”。 –

+0

当然这些是最常见的,或者至少是新的JavaScript程序员遇到的第一件事情:)关于异步行为的另一个重要问题是像Google Maps这样的API,它会隐藏AJAX操作。 – Pointy