Javascript变量声明范围

时间:2016-07-23 06:46:23

标签: javascript

为什么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>

8 个答案:

答案 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 = 10b在您的print功能范围内。请注意,您应该避免使用document.writeprint属于window属性,因此您将覆盖它。

答案 6 :(得分:0)

您的代码失败的2个原因。

1。你没有调用打印功能

2您正在全局范围内使用局部变量。

变量b在函数中被定义为它的局部变量,它的范围在于它自身的功能。因此,您应该将b声明为全局范围。

尝试初始化var b并从函数中删除var关键字

var a= 45, b = 0;
function print(){
b = 10; 
...

More detailed understanding of Variable Scope

答案 7 :(得分:0)

当使用var声明的变量不属于语句的范围时,因此没有if的范围,并且c是全局声明的。 但是如果在函数中声明变量,它属于最近的封闭函数的范围,因此b不能是全局变量。

来自MDN

  

变量声明,无论它们出现在何处,都会在任何声明之前处理   代码被执行。用var声明的变量的范围是它   当前执行上下文,它是封闭函数或者,   对于在任何函数外部声明的变量,global。