有些函数某些时候是异步的,但其他时候却不然。举个例子,jQuery的同名函数(通常记作$)可用于延迟函数直至DOM已经结束加载。但是,若DOM早已结束了加载,则不存在任何延迟,$的回调将会立即触发。 不注意的话,这种行为的不可预知性会带来很多麻烦。我曾经看到也犯过这样一个错误,即假定$会在已加载本页面其他脚本之后再运行一个函数。 // application.js $(function() { utils.log('Ready'); }); // utils.js window.utils = { log: function() { if (window.console) console.log.apply(console, arguments); } }; <script src ="application.js"></script> <script src ="util.js"></script> 这段代码运行得很好,但前提是浏览器并未从缓存中加载页面(这会导致DOM早在脚本运行之前就已加载就绪)。如果出现这种情况,传递给$的回调就会在设置utils.log之前运行,从而导致一个错误。(为了避免这种情况,应该采用一种更现代的管理客户端依赖性的方法。请参阅第6章。) 下面来看另一个例子。