• 注意细节js变量作用域


      先看一下这段Javascript脚本代码:

     1<script language="javascript">
     2    <!--
     3        var v = "aaa"
     4        function func()
     5        
     6            alert(v); 
     7            var v = "bbb"
     8        }

     9    //-->
    10</script>

    alert 出来的是什么?在我们看来应该是 "aaa",实际上alert 出来的是 "undefined"。为什么?
    因为 Javascript为了简化处理,变量实际上只有两种作用域,全局变量和函数的内部变量。你在函数内部任何一个地方定义的变量其作用域都是整个函数体。而在 alert 的时候函数的内部变量 v 已经定义了,并且覆盖掉了同名的全局变量的定义,只是还没有被初始化,所以 alert 出来的是 "undefined"。

    1.什么是全局变量?

    JavaScript中的全局变量实际上指的是window对象下的对象属性。

    2.作用域划分。

    JavaScript中的作用域是基于上下文,以函数进行划分的,而不是由块(block)划分的。

    接下来看一个例子(原例来自《精通JavaScript》,有改动):

    <script type="text/javascript">

    // 设置全局变量foo,并置为“test”
    var foo = "test";

    if ( true )
    {
        
    // 注意:现在还在全局作用域中
        var foo = "new test";
    }


    // 如我们所见,现在foo等于'new test'了
    alert( foo );

    // 创建一个会修改变量foo的新函数
    function test()
    {
        
    //函数内部定义变量不影响全局变量
        var foo = "old test";
        
    //隐式定义全局变量
        val = 'hello!';
    }


    // 然而在调用test函数时,foo只在函数作用域内起作用
    test();

    // 确认foo还是等于'new test'
    alert( foo );

    // 全局变量实际是window下的属性
    alert( window.foo );

    // 函数内部隐式定义的全局变量
    alert(val);

    </script>

    现在你大概对JavaScript的作用域有了一个初步的理解。

    要强调的两点是:

    1.在同一作用域中,JavaScript是允许变量的重复定义的,并且后一个定义将覆盖前一个定义。

    2.函数内部如果不加关键字var而定义的变量,默认为全局变量。

  • 相关阅读:
    HDU 2883 kebab
    CSUOJ 1635 Restaurant Ratings
    CSUOJ 1638 Continued Fraction
    POJ 1852 Ants
    ZOJ 3471 Most Powerful
    CSUOJ 1637 Yet Satisfiability Again!
    如何生成CA证书
    Keepalived实现双机热备
    Nginx负载均衡的优缺点
    负载均衡之 nginx
  • 原文地址:https://www.cnblogs.com/aming/p/1255388.html
Copyright © 2020-2023  润新知