如何减少我的代码中这些错误的频率?

看看这个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中检查运行时类型,只是严格性不是Javascript中的首选样式。 JS黑客喜欢把它挂起来。

其他黑客也能应付这个,对吧? 所以,我不建议您花费很长时间将语言或jQuery归咎于调试此问题,而是建议您调查其他方法来减少调试工作。

以下是我可以想到的一些建议:

  • 在将它粘贴到.js文件之前,先在交互式JS控制台中测试一小段代码:this
  • 允许你快速迭代,直到你正确(你如何使用$ .when()?)
  • 确保当你做得正确时,你就会明白如何使用API
  • 继续学习JS,并不断写更多。 第二个错误是:在函数中没有包装console.log(“全部完成”),这表明关于JS的基本概念还没有完全锁定到位 - 一个经验丰富的JS黑客决不会犯这个错误。

  • 在你更突出的错误的情况下,答案可以用两个词来表示:静态类型。 静态打字并不能解决所有问题,但是它会耗费大量的时间来追踪这些微妙的失败。

    静态类型的缺点并不像缺少索赔一样,与编程更困难或更弱或者类似的东西有关。 最大的问题是,语言的打字系统的强度似乎与语言的流行程度相反。 像Scala和Haskell这样的非常好类型的语言仍然处于精品级的接受程度。 Java更受欢迎,但它的类型系统很难使用并且出现了很多漏洞; 类似的可以说是C#。 非常流行的PHP的类型系统将会成为一个中立的观察者,作为故意的破坏行为。 像FORTAN和C这样的老式语言甚至都没有尝试过。

    我不知道这是为什么,但我确信明显的解释 - 人们不喜欢强打字 - 是不正确的。

    一个相关的问题是,你还不能将任何强类型语言编译为JavaScript。 最接近的方法可能是GWT。


    看起来你错了

    $.when([x,y])
    

    对于

    $.when(x,y)
    

    我不认为那里有一个分析工具可以帮助解决这种错误,因为将列表传递给时间是完全可以接受的。 如果你想有一个更严格的功能,你可以自己创建一个:

    function whenForMoreThanOne(list_of_deferreds){
        return $.when.apply($, list_of_deferreds);
    } 
    
    链接地址: http://www.djcxy.com/p/55403.html

    上一篇: How to reduce the frequency of such errors in my code?

    下一篇: ASP.NET MVC 3 Custom Authentication/Authorization