zoukankan      html  css  js  c++  java
  • 面向对象的 Javascript 语言特性:作用域

     作用域

      作用域是JavaScript中一个较难处理的特性。所有面向对象的编程语言都有某种形式的作用域;这要看是什么上下文约束着作用域。在JavaScript里,作用域由函数约束,而不由块约束(如while,if,和for里的语句体)。最终可能使得一些代码的运行结果表面上显得怪异(如果你来自一种块作用域语言的话)。程序2-10的例子说明了“函数作用域代码”的含义。

      代码2-10. JavaScript中变量作用域是怎样工作的例子

    //设置一个等于"test"的全局变量foo
    var foo = "test";

    //在if块中
    if ( true ) {
        //设置foo为"new test"
        //注意:这仍然是在全局作用域中
        var foo = "new test";
    }

    //正如我们在此处可见,foo现在等于"new test"
    alert( foo == "new test" );

    //创建一个修改变量foo的函数
    function test() {
        var foo = "old test";
    }

    //调用时,foo却驻留在是在函数的作用域里面
    test();

    //确认一下,foo的值仍然是"new test"
    alert( foo == "new test" );

      在程序2-10中你会发现,变量位于在全局作用域。基于浏览器的JavaScript有趣的一面是,所有的全局变量实际上都是window对象的属性。尽管一些老版本的Opera浏览器或Safari浏览器不是这样,假定浏览器这样工作通常是一个很好的经验规则。程序2-11展示了一个这种例子。
      
      程序2-11. JavaScript的全局变量与window对象的例子

    //全局变量,包含字符串"test"
    var test = "test";

    //你会发现,我们的全局变量和window的test属性是相同的
    alert( window.test == test );

      最后,让我们来看看当一个变量漏定义时会怎样。程序2-12里,变量foo在test()的作用域里被赋值。但是,程序2-12里实际并没有(用var foo)定义变量的作用域。当变量foo没有明确定义时,它将成为全局变量,即使它只在函数的上下文使用。

      程序2-12. 隐式全局变量声明的示例

    //一个为变量foo赋值的函数
    function test() {
        foo = "test";
    }

    //调用函数为foo赋值
    test();

    //我们发现foo现在是全局变量了
    alert( window.foo == "test" );

      到目前应该很明显,尽管JavaScript的作用域不如块作用域语言的严格,它还是相当强大和有特色的。尤其是与下节中叙述的闭包的概念结合起来时,JavaScript语言的强大将展露无遗。

  • 相关阅读:
    [转]VS2013自带SQL Server 的启用方法
    [转]CryptographyHelper.cs
    [转]Oracle 经验集
    程序的健壮性和鲁棒性
    死理性派恋爱法:拒绝掉前面37%的人
    Asp.net页面间传值方式汇总
    【操作系统】总结五(I/O管理)
    Windows编程
    【操作系统】磁盘
    【操作系统】文件系统
  • 原文地址:https://www.cnblogs.com/zitiger/p/776772.html
Copyright © 2011-2022 走看看