有人可以向我解释上面是如何产生警告的。
在被问到之前应该注意,$me 变量不是在函数调用之外定义的。当然,$me 的范围应该在“if”语句的末尾结束。
我觉得我在这里遗漏了一些明显的东西,但不能完全指出它。
有人可以向我解释上面是如何产生警告的。
在被问到之前应该注意,$me 变量不是在函数调用之外定义的。当然,$me 的范围应该在“if”语句的末尾结束。
我觉得我在这里遗漏了一些明显的东西,但不能完全指出它。
在 JavaScript 中,变量不限于块范围。
var foo = "a";
if (true) {
var foo = "b";
}
console.log(foo); // "b" not "a"
变量声明被提升(移动到顶部),所以这实际上是说:
var foo;
var foo;
foo = "a"
if (true) {
foo = "b";
}
console.log(foo); // "b"
变量总是被提升到范围的顶部。一般来说,只有函数才有作用域。if
不会创建它自己的范围。没有for
,while
甚至没有switch
。
很容易犯这个错误(即使对于资深程序员),所以 JSHint 让你知道它。
if
语句没有自己的范围。它仍然是使用的范围,例如。函数或全局范围。
因此,其中定义的if
变量将与之前定义的变量发生冲突。
该函数反复尝试声明var $me
它应该只声明一次的时间。
//Scope is defined at function level
function something(){
var $me = {}; //declaration, only do this once within a function
if(something){
$me = "x"; //assignment, for after a var is declared
}else if(somethingElse){
$me = "y"; //another assignment, do this as much as you want
}
}