我有以下内容:
$.ajaxSetup({beforeSend:function(a){a.setRequestHeader("Accept","text/javascript")},cache:false});
JSLint告诉我:“第1行的问题83:缺少分号”
你同意吗?我添加了它,但是当我使用YUI Compressor时它会删除它吗?由于
答案 0 :(得分:5)
JSLint会伤害你的感情。
- Douglas Crockford
并且在90%的情况下它不做什么,它可能会抱怨丢失的分号,但代码仍然可以正常工作,因为技术上不需要在该位置,因此YUI压缩器将其删除以保存字节。 / p>
答案 1 :(得分:4)
JSLint尝试检测潜在的错误,就像警告标志一样。因此,它应该用在工作代码和非压缩代码上。
答案 2 :(得分:3)
压缩器将其删除以节省发送的字节数(较小的文件大小/更快下载)。
可选的分号可能是导致问题的原因,例如
function a() {
return // <-- semi colon is inserted here, terminating the line.
{
abc: '???'
}
}
alert(a()); // undefined
我总是明确添加我的半冒号,然后BSD KNF style indenting。
不要担心压缩器会做什么 - 如果你的代码运行良好,那就很好了。
Pst在评论(欢呼声)中指出ASI不是上面的问题 - return
的语法期望值紧随其后。不过,我认为ASI可能仍然是一个问题 - 如果每个\n
自动获得;
。
我掀起了另一个ASI作为PITA的例子。
var a = function(b) {
b.call();
};
(function() {
c = 'hello',
a
(function() {
alert('hello')
})
})();
代码看起来很愚蠢(为什么a
变量漂浮在那里)?
新手编码器可能不知道var
作用域变量,并且可能会构建一个包含两个变量的列表。然后他们可以在括号中包裹一个函数(这个人还在学习:)。)。
在上面的示例中,该函数将被发送到a()
并执行。
答案 3 :(得分:0)
正确的javascript不需要分号,但jslint可以帮助您找到潜在的错误,而不一定是破坏了javascript。您可以放心地忽略该错误。
答案 4 :(得分:0)
这是JSLint所需的版本
$.ajaxSetup({beforeSend:function(a){a.setRequestHeader("Accept","text/javascript");},cache:false});
注意:我添加了; to setRequestHeader函数调用。