1

破碎的范围

有人可以向我解释上面是如何产生警告的。

在被问到之前应该注意,$me 变量不是在函数调用之外定义的。当然,$me 的范围应该在“if”语句的末尾结束。

我觉得我在这里遗漏了一些明显的东西,但不能完全指出它。

4

3 回答 3

5

在 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不会创建它自己的范围。没有forwhile甚至没有switch

容易犯这个错误(即使对于资深程序员),所以 JSHint 让你知道它。

于 2013-10-10T11:25:42.693 回答
4

if语句没有自己的范围。它仍然是使用的范围,例如。函数或全局范围。

因此,其中定义的if变量将与之前定义的变量发生冲突。

于 2013-10-10T11:24:08.550 回答
1

该函数反复尝试声明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
    }
}
于 2013-10-10T11:24:35.747 回答