看看this JsFiddle:

var requests = [
  $.ajax("http://search.twitter.com/search.json", { data: { q: 'ashishnjain' }, dataType: 'jsonp' })
    .done(function() {console.log("request");}),

  $.ajax("http://search.twitter.com/search.json", { data: { q: 'ashishnjain' }, dataType: 'jsonp' })
    .done(function() {console.log("request");})
];

$.when(requests).done(console.log("alldone"));

预期的输出是:request request alldone,但实际上这会打印alldone request request

这段代码中实际上存在两个错误(如果您喜欢这种情况,请作为练习来保留),但是最终我认为这是因为JavaScript和jQuery在给定毫无意义的参数时都非常宽大。在这种环境下,“正确”的事情似乎是“做某事或什么都不做,就是不要抛出错误!”。

看到此代码通过JsLint 并花了我几个小时的调试时间(实际代码当然要复杂几个数量级),我想知道我还能采取什么措施来减少浪费的时间如此宽容的宽大处理。这不是一个孤立的例子。它似乎一遍又一遍地发生。有什么建议?

最佳答案

实际上,可以在Javascript中的运行时使用check types,只是严格不是Javascript中的首选样式。 JS黑客喜欢将其挂起。

其他黑客可以应付这个,对吗?因此,我建议不要研究其他方法来减少调试工作,而应该将大量时间花在调试该问题上,而不是指责该语言或jQuery。

我可以想到以下几点建议:

  • 首先在交互式JS控制台中测试一小段代码,然后再将其粘贴到您的.js文件中:
  • 允许您快速迭代直到正确为止(如何使用$ .when()?)
  • 确保在正确完成操作后,您将了解如何使用API​​
  • 继续学习JS,并继续编写更多它。您犯的第二个错误:没有在函数中包装console.log(“all done”),这表明有关JS的基本概念尚未完全锁定-经验丰富的JS黑客将永远不会犯此错误。
  • 10-05 20:37
    查看更多