为什么c variable
if条件可以在全局范围内工作,而b variable
不适用于全局...?
<script type="text/javascript" language="javascript">
<!--
var a = 45;
function print(){
var b = 10;
document.write(a);
}
if(a == 45)
{
var c = 10;
}
print();
document.write("a is : " + a + "<br />");
document.write("b is : " + b + "<br />");
document.write("c is : " + c + "<br />");
//-->
</script>
答案 0 :(得分:1)
为什么变量b是本地的
当函数print()的执行上下文被创建时,将始终创建变量b ,并且一旦该函数完成将被销毁。因此它依赖于该函数,因此是该函数的本地函数。
为什么变量c是全局的
但是如果条件中包含 var c ,则会在全局级别创建其执行上下文,并声明 var c 。如果&#39;如果&#39;该条件被分配了一个值。变成了现实。
您可以阅读吊装了解更多详情: https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
答案 1 :(得分:1)
因为somename::foo
变量具有b
函数内的块范围,并且print
变量在c
函数之外声明,这就是为什么print
变量具有全局范围< / p>
答案 2 :(得分:1)
在函数中声明变量时,它仅在函数中可用,并且在执行函数后将消失。在函数中声明变量使得它只能在函数内访问;外部命令无法访问该变量。
答案 3 :(得分:0)
只是因为b变量在函数print中初始化..而c变量在全局范围内初始化。 所以在这一行:
document.write("b is : " + b + "<br />");
你试图得到b变量的值,但是你没有调用函数print ..
看看这个:
var a = 45;
var b;
var c;
function print(){
b = 10;
document.write(a);
}
if(a == 45)
{
var c = 10;
}
document.write("a is : " + a + "<br />");
document.write("b is : " + b + "<br />");
document.write("c is : " + c + "<br />");
//-->
它将打印以下内容:
a is : 45
b is : undefined
c is : 10
因为b没有因为函数尚未被调用而改变..但是c已经被全局范围内的if语句改变了。
var a = 45;
var c;
function print() {
b = 10;
document.write(a);
}
print()
if (a == 45) {
var c = 10;
}
document.write("a is : " + a + "<br />");
document.write("b is : " + b + "<br />");
document.write("c is : " + c + "<br />");
//-->
答案 4 :(得分:0)
您可以在全局范围内声明 b ,并在满足条件时将其设为10。在你的代码中,b是函数的内部范围,因此它不是全局的
<script type="text/javascript" language="javascript">
<!--
var a = 45,b;
function print(){
b = 10;
document.write(a);
}
if(a == 45)
{
var c = 10;
}
document.write("a is : " + a + "<br />");
document.write("b is : " + b + "<br />");
document.write("c is : " + c + "<br />");
//-->
</script>
答案 5 :(得分:0)
这是因为a == 45
所以c = 10
,b
在您的print
功能范围内。请注意,您应该避免使用document.write
而print
属于window
属性,因此您将覆盖它。
答案 6 :(得分:0)
您的代码失败的2个原因。
变量b
在函数中被定义为它的局部变量,它的范围在于它自身的功能。因此,您应该将b
声明为全局范围。
尝试初始化var b并从函数中删除var
关键字
var a= 45, b = 0;
function print(){
b = 10;
...
答案 7 :(得分:0)
当使用var
声明的变量不属于语句的范围时,因此没有if
的范围,并且c
是全局声明的。
但是如果在函数中声明变量,它属于最近的封闭函数的范围,因此b
不能是全局变量。
来自MDN
变量声明,无论它们出现在何处,都会在任何声明之前处理 代码被执行。用var声明的变量的范围是它 当前执行上下文,它是封闭函数或者, 对于在任何函数外部声明的变量,global。