如果JavaScript';“s窗口”;名称空间;被污染了?
上下文是JavaScript。我刚刚发现了两个很难发现的错误 在一个案例中,有人写道:如果JavaScript';“s窗口”;名称空间;被污染了?,javascript,namespaces,Javascript,Namespaces,上下文是JavaScript。我刚刚发现了两个很难发现的错误 在一个案例中,有人写道: for (var k in items) { item = items[k] 。。。因此,在item之前缺少var导致window的item()方法被损坏 在另一种情况下,有人写道: parent = this.parentOfRow(row); 。。。而在父项之前缺少的var导致窗口的父项成员混乱 这两个错误在许多步之外都可以看到 现在是否有人可以通过某种“监视工具”得到警告?我认为一个好的第一步行
for (var k in items) {
item = items[k]
。。。因此,在item
之前缺少var
导致window
的item()
方法被损坏
在另一种情况下,有人写道:
parent = this.parentOfRow(row);
。。。而在父项
之前缺少的var
导致窗口
的父项
成员混乱
这两个错误在许多步之外都可以看到
现在是否有人可以通过某种“监视工具”得到警告?我认为一个好的第一步行动是
“使用严格的”
,这就是。这将导致缺少的var
抛出错误:
“严格使用”;
变量项={a:'b',c:'d'};
用于(项目中的变量k){
项目=项目[k]
}
我认为一个好的第一步是“严格使用”
,这一点很重要。这将导致缺少的var
抛出错误:
“严格使用”;
变量项={a:'b',c:'d'};
用于(项目中的变量k){
项目=项目[k]
}
AFAIK JShint()将在您暗示隐式全局变量时通过省略var关键字发出警告
function main() {
myVariable = 15;
return myVariable;
}
main();
这将抛出一个JS提示错误,通知您myVariable未定义。注意这些错误可以防止您污染全局名称空间。AFAIK JShint()会在您暗示隐式全局变量时通过省略var关键字发出警告
function main() {
myVariable = 15;
return myVariable;
}
main();
这将抛出一个JS提示错误,通知您myVariable未定义。注意这些错误可以防止您污染全局名称空间。除了Rob的建议之外,您还应该研究类似的linting工具 这些将提醒您注意许多常见的陷阱,并帮助您避免在其他方面可能遗漏的问题 您案例的相关ESLint规则可能是
var
。非常感谢。你知道有什么意想不到的缺点吗?我只知道在使用“use strict”时会出现预期的缺点,也就是说,以前正常工作的错误代码现在会抛出错误:-):-)是的,我知道了。谢谢,很好。我刚刚试着打开它,并立即发现另外两个变量没有var
。非常感谢。你知道有什么意想不到的缺点吗?我只知道在使用“use strict”时会出现预期的缺点,也就是说,以前正常工作的错误代码现在会抛出错误:-):-)是的,我知道了。谢谢。谢谢,这看起来是一个在项目中使用的有价值的工具。谢谢,这看起来是一个在项目中使用的有价值的工具。谢谢。这将用于静态代码分析,这将很有帮助。谢谢。这将有助于静态代码分析。