如果这是重复的道歉。如果有,请随时指导我。
但为什么会这样呢?
var a = 45;
function temp() {
b = 34;
}
alert(b) //34
var a = 45;
function temp() {
a = 34;
}
alert(a) // 45 WHY IS THIS 45???
不应该全局分配34,然后var a最初分配给全局范围,所以34覆盖45?
答案 0 :(得分:2)
由于您没有调用该方法:
var a = 45;
function temp() {
a = 34;
}
temp(); // run temp
alert(a); //34
答案 1 :(得分:1)
我已在您的代码内联添加评论以显示正在发生的事情:
var a = 45; // declare a global variable
function temp() {
b = 34; // declare a unscoped / global variable (you're missing the "var" in your declaration
}
alert(b); // attempts to print "b" but "temp" function hasn't been declared. Results in undefined
var a = 45; // redeclare does nothing
function temp() { // overrides previous declaration of "temp" function
a = 34; // update the global variable - when the function is called
}
alert(a); // print the function. It's 45 because you haven't called temp()
如果b=34
已写为var b=34;
,那么当您尝试访问b
时,您会收到未定义的错误。这就是您通常应该在发布之前通过JSLint检查运行代码的原因。它检查未声明的变量和其他常见错误。您还可以使用 strict 模式
修改:
如 @Spencer Wieczorek 所述,包含变量声明的temp
函数实际上从未被调用过。因此,从未定义变量(在任何范围内),因此在尝试之后访问变量时,它将始终返回undefined
在这个例子中:
var a = 45;
function temp() {
a = 34;
}
alert(a);
a
的值未更改的原因是temp
函数从未执行过。有几种方法可以改变这种情况。最简单的就是致电temp
var a = 45;
function temp() {
a = 34;
}
temp(); // call temp()
alert(a); // prints "34"
答案 2 :(得分:-1)
变量的值取决于其内存的声明。如果在不同的函数中声明它们,Javascript可以存储具有相同名称的不同内存空间。因此,请确保在所需功能中使用正确的变量。