如何减少我的代码中这些错误的频率?
看看这个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归咎于调试此问题,而是建议您调查其他方法来减少调试工作。
以下是我可以想到的一些建议:
在你更突出的错误的情况下,答案可以用两个词来表示:静态类型。 静态打字并不能解决所有问题,但是它会耗费大量的时间来追踪这些微妙的失败。
静态类型的缺点并不像缺少索赔一样,与编程更困难或更弱或者类似的东西有关。 最大的问题是,语言的打字系统的强度似乎与语言的流行程度相反。 像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