如何在我的代码中减少这种错误的频率
How to reduce the frequency of such errors in my code?
看看这个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
。
这段代码中实际上有两个bug(如果你喜欢这种东西,可以留作练习),但最终我认为这是因为JavaScript和jQuery在给出毫无意义的参数时都非常宽松。在这种环境中,"正确"的事情似乎是"做点什么或者什么都不做,只是不要抛出错误!"。
看到这段代码通过了JsLint,并且刚刚花费了我几个小时来调试(实际代码当然要复杂几个数量级),我想知道我还能做些什么来减少在这种毫无根据的宽大处理上浪费时间。这不是一个孤立的例子;这种事似乎一次又一次地发生。有什么建议吗?
实际上可以在Javascript运行时检查类型,只是严格不是Javascript的首选样式。JS黑客喜欢把它放轻松。
其他黑客对付这个,对吗?因此,与其将长时间调试这个问题归咎于语言或jQuery,不如研究其他方法来减少调试工作。
以下是我能想到的几个建议:
- 在将代码粘贴到.js文件之前,先在交互式JS控制台测试一小段代码
- 允许你快速迭代,直到你得到正确的(你如何使用$.when() ?)
- 确保当你做正确的,你知道如何使用API
继续学习JS,继续写更多的JS。你犯的第二个错误是:没有在函数中包装console.log("all done"),这表明JS的基本概念还没有完全锁定到位——一个经验丰富的JS黑客永远不会犯这样的错误。
对于更突出的错误,答案可以用两个字来表示:静态类型。静态类型并不能解决所有问题,但是它从跟踪这些细微故障的工作中省去了一大块。
静态类型的缺点是不是,就像missingno声称的那样,它会使编程变得更困难或更不强大或诸如此类。最大的问题是,一种语言的类型系统的强度似乎与该语言的流行程度成反比。非常好的类型化语言,如Scala和Haskell,仍然处于被接受的精品水平。Java更受欢迎,但它的类型系统很难使用,而且漏洞百出;c#也有类似的情况。非常流行的PHP的类型系统会把中立的观察者视为蓄意破坏。像FORTAN和C这样的老语言甚至都不会尝试。我不知道为什么会这样,但我确信显而易见的解释——人们不喜欢强类型——是不正确的。
一个相关的问题是,你还不能将任何强类型语言编译成JavaScript。最接近的方法可能是GWT。
看来你搞错了
$.when([x,y])
$.when(x,y)
我不认为有一种分析工具可以帮助捕获这种错误,因为将列表传递给when是完全可以接受的。如果你想要一个更严格的函数,你可以自己创建一个:
function whenForMoreThanOne(list_of_deferreds){
return $.when.apply($, list_of_deferreds);
}
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 我如何修复包含在captcha的addthis中的错误
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- CKFinder 3为所选文件返回错误的URL
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 相位器状态未捕获参考错误
- /undefined在我的404错误日志中多次出现
- Javascript未捕获语法错误意外的标识符错误
- javascript:如何在antlr生成的Lexer中进行错误处理
- Angularjs工厂注入错误
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 如何在我的代码中减少这种错误的频率