面向对象的 Javascript(4)

作者:mozart0 来源:蓝色经典 时间:2013-07-21 11:57:22 

  作用域

  作用域是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语言的强大将展露无遗。

标签:面向对象,Javascript
0
投稿

猜你喜欢

  • 如何把Recordset转换成彩色的XML文件?

    2009-11-02 20:22:00
  • 15个滑动门效果CSS导航菜单实例教程

    2010-02-20 13:02:00
  • jQuery在去除缓存数据的一个失误

    2009-12-14 20:40:00
  • MYSQL教程:数据列类型与查询效率

    2009-02-27 15:37:00
  • 盗亦有道 Web2.0网站优秀模仿者逐个数

    2007-09-11 19:46:00
  • phpstudy apache开启ssi使用详解

    2023-05-25 08:04:44
  • SQL集合函数中case when then 使用技巧

    2011-09-30 11:54:59
  • go slice 数组和切片使用区别示例解析

    2023-06-22 04:07:16
  • Pandas Matplotlib保存图形时坐标轴标签太长导致显示不全问题的解决

    2023-07-22 20:03:09
  • 创建数据表/创建列的一些asp函数

    2008-06-24 12:21:00
  • FSO无效的过程调用或参数问题

    2010-03-25 21:49:00
  • asp如何创建一个功能强大的文档管理程序?

    2009-11-15 17:44:00
  • SQL Server各种日期计算方法

    2008-09-11 21:47:00
  • Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁

    2009-03-06 10:37:00
  • 基于微服务框架go-micro开发gRPC应用程序

    2023-06-22 21:19:27
  • asp 得到动态数组中元素的个数

    2011-03-30 10:55:00
  • asp HTTP_X_FORWARDED_FOR和REMOTE_ADDR

    2010-07-02 12:33:00
  • php使用Cookie实现和用户会话的方法

    2023-07-08 15:30:49
  • ACCESS如何打印窗体中当前显示的记录

    2008-11-20 16:31:00
  • ASP.NET 2.0防止同一用户同时登录

    2007-10-03 14:30:00
  • asp之家 网络编程 m.aspxhome.com