在定义之前使用'变量'

nim*_*cap 12 javascript jslint

我正在检查是否定义了变量,如果没有明确定义,我将通过执行以下操作来定义它:

if ( typeof(aVariable) == 'undefined' ) {
  var aVariable = value;
}
Run Code Online (Sandbox Code Playgroud)

因为没有定义变量,JSLint会在它被定义之前警告它被使用,这正是我想要的.

我怎么能克服这个?

我想启用显式定义这些变量:

<script>
  var aVariable = value;
</script>
<script src="myScript.js"></script>
Run Code Online (Sandbox Code Playgroud)

所以每个要包含此脚本的人都可以自定义一些属性.而且我担心我无法改变这种逻辑,因为它已经被这种方式用于数百个网站.

向下滚动查找答案/解决方案,因为我已经回答了我自己的问题Stack Overflow没有显示出来.一定不要错过他们.

Fen*_*ton 7

我认为JSLint告诉你的是你不应该在定义之前使用变量.如果您对自己的情况感到满意,可以忽略该警告.如果您不完全确定,请考虑一下为什么还没有定义此变量.

例如,你真的想测试aVariable是否有一个值集,而不是是否定义了?

var aVariable = null;
Run Code Online (Sandbox Code Playgroud)

... (一段时间以后)

if (aVariable == null) {
  aVariable = value;
}
Run Code Online (Sandbox Code Playgroud)


nim*_*cap 5

我在JSLint邮件列表中找到了更多可接受的答案,抱歉Boldewyn :)

解决方案1

在IE中,在脚本级别(即每个文件或每个脚本块),如果它在解析阶段(执行前)看到"var"声明,它将重置该变量的值(如果它已经存在).

所以更好的方法就是这样做:

/*global foo: true */
if (typeof foo === "undefined") {
foo = "some value";
}
Run Code Online (Sandbox Code Playgroud)

通过不声明"var"并简单地指定foo,foo将自动获得全局范围.

解决方案2(特例)

如果显式设置变量不为零或为假

var foo = foo || "some value";
Run Code Online (Sandbox Code Playgroud)