Javascript变量作用域——在函数外部声明的变量
Javascript Variable Scope - var declared outside of function
如果这是重复的,请道歉。如果是的话,请告诉我。
但是为什么会这样??
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?
由于没有调用方法:
var a = 45;
function temp() {
a = 34;
}
temp(); // run temp
alert(a); //34
我在你的代码中添加了内联注释来显示发生了什么:
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 mode
正如@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"
变量的值取决于它的内存声明。Javascript可以用相同的名称存储不同的内存空间,如果它们在不同的函数中声明的话。因此,请确保在所需的函数中使用正确的变量。
相关文章:
- 使用同一对象中的其他变量声明变量
- 如何将变量声明为全局变量
- 如何将变量声明为全局变量?用case foreach?Javascript
- 理解bootstrap.js变量声明
- 将 Javascript 变量声明为 PHP 形式
- 单个逗号分隔的变量声明和多个声明之间的区别是什么
- Do变量声明初始化函数
- Javascript变量声明:什么是“;var myVariable={}”;
- javascript中不同类型的变量声明
- 为什么在循环的Javascript中包含变量声明
- for 循环中必需的变量声明
- JavaScript 中的变量声明
- 在 Javascript 变量声明中使用逗号
- 你能在变量声明中添加条件吗?
- JavaScript 全局变量声明
- 节点.js变量声明和作用域
- 具有多个逗号分隔值的变量声明是什么意思(例如 var a = b,c,d;)
- 移动图像 ..JavaScript 将变量声明为字符串
- 让 javascript 将(默认情况下)未声明的变量声明到当前本地范围(基于首次使用)而不是全局范围
- 循环中的变量声明