为什么JSLint不允许“;var”;在for循环中
Why does not JSLint allow "var" in a for loop?
我的代码或plovr有问题。我去JSLint寻求帮助。然而,JSLint似乎认为这是一个致命的错误,并拒绝检查更多的代码:
for (var i = 0; i < data.length; i += 4) {
为什么?我喜欢这种宣告"我"的方式。
如果您在Windows上,JSHint似乎不是一个替代方案。我现在正在试用在线林特。我有一种感觉,这个错误会有点难找到,所以我很高兴能得到关于好的代码检查器的建议。
我同意Niet the Dark Absol的观点,即该工具是基于意见的。反思它强加的所有规则,以及它们在你的特定项目中是否真的有意义。它也不是JavaScript的唯一"lint"工具。也许ESLint或其他类似的工具更适合您的需求。
但我也不同意他的观点:在函数开始时声明所有变量是不好的做法,尤其是在函数很长的情况下,因为这会使理解程序变得更加困难。IMHO,无论JavaScript的作用域如何工作,这一点都成立:这与程序语义无关,而是与代码可读性有关!
我认为,应该在尽可能接近第一次使用时声明变量(即,在您的情况下:在for循环中)。这确保了阅读你的代码的人(三个月后的同事或你自己)脑子里的信息也尽可能少。在开始时声明所有变量会迫使读者在整个函数中记住所有这些变量。像"这个变量的当前值是多少?"或"它的目的是什么?"这样的问题变得更难回答。
此外,您更倾向于将一个变量用于多个目的。这不仅令人困惑,而且很危险!值可能从第一次使用"泄漏"到第二次使用。这可能会导致微妙的、难以调试的问题。
我个人认为JSLint是个弱智。但在这个敏感话题上,意见可能会有所不同
—失调,45秒前
嘿,这其实是一个有效的观点。JSLint完全是基于的观点构建的,它不是上帝的话语。
然而,一般的好做法是在一个地方声明所有变量,在函数块的开头:
function doSomething() {
var a, b, c, d;
a = 1;
c = 10;
for( b = a; b < c; b++) {
d = b*2 + a-c;
alert(d);
}
}
因为在for循环中创建一个bar会创建一个全局变量,这是JavaScript所做的事情之一,但大多数人都没有意识到。如果你不这样做,而你或其他人在该函数或全局范围内创建了相同的var,那么我的朋友将是著名的JavaScript步兵之一。
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- For循环在Jquery中只运行一次
- 如何在for循环中使用计数器
- for循环中的JavaScript闭包
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- For循环在调用时未运行
- 如何使用for循环添加所有按钮'单击事件
- 如何更改在for循环中生成的圆的位置
- 为什么这个For循环会使浏览器实验室崩溃
- 为什么我使用javascript获得了一个无限的for循环
- 在for循环中使用多维数组设置google.maps.Marker图标
- 如何在angularJS中运行for循环而不使用html标记