
有人可以向我解释上面是如何产生警告的.
在被问到之前应该注意,$ me变量没有在函数调用之外定义.当然,$ me的范围应该在"if"语句的末尾结束.
我觉得我在这里遗漏了一些明显的东西,但不能完全指责它.
在JavaScript中,变量不限于块范围.
var foo = "a";
if (true) {
var foo = "b";
}
console.log(foo); // "b" not "a"
Run Code Online (Sandbox Code Playgroud)
变量声明被提升(移到顶部),所以这真的说:
var foo;
var foo;
foo = "a"
if (true) {
foo = "b";
}
console.log(foo); // "b"
Run Code Online (Sandbox Code Playgroud)
变量总是被提升到范围的顶部.通常只有函数具有范围.if不会创建自己的范围.既不是for,while也不是switch.
很容易犯这个错误(即使是经验丰富的程序员),所以JSHint会让你知道它.