javascript变量、作用域、命名空间

来源:岁月联盟 编辑:exp 时间:2012-02-20

javascript变量主要分为两类:
I.   全局变量
II.  局部变量(函数内的变量)

I.   全局变量: 定义在方法体外地所有变量都是全局变量, 还有即使在方法体内使用的变量, 但是未用var关键字声明的也都是全局变量。
ll.  局部变量: 定义在方法体内的、 使用var关键字声明的变量。 (即使跟全局变量名一样, 他也会覆盖全局变量。)


注:
 全局变量就是在当前页面起作用, 一个页面当中的iframe也不管用, 只在一个页面当中有效。
 如果JS代码很多的时候, 我们都要引用JS脚本文件, 但是有可能出现两个脚本当中的全局变量名是一样的, 这会出现错误。 因为面对这些问题JS不会报错, 所以我们需要使用命名空间来解决这些冲突。
javascript命名空间:
      random.js
[javascript]
// 通过 ID 获取 Element 对象 
function $(id) { 
    return document.getElementById(id); 

 
// 显示对应 ID 的对象的节点类型名字 
function myMethod(id) { 
    alert($(id).nodeName); 

 
<span style="color:#cc0000;">// 这是对外的接口 
window['myNamespace']= {} 
window['myNamespace']['$'] = $; 
lt;/span> 
上面这段代码有两个方法, 红色的部分就是所谓的命名空间,为上面说是所谓的命名空间? 因为不是上面新的一种机制或者技术。 如果仔细观察会发现
window['myNamespace'] = {}
其实就是一个定义对象的语法, 我们在window对象里添加了一个属性(属性名:myNamespace), 这个属性就是一个对象。 第二行代码
window['myNamespace']['$'] = $;
window['myNamespace']就是一个对象, 我们要给这个对象再添加一个属性['$'], 这个属性就是方法$, 所以我们引入random.js文件之后, 在页面想要使用random.js中的$()方法的时候, 使用window.myNamespace.$就可以了。 也可以直接用myNamespace.$, 省略了window。

当然还有很多实现命名空间的办法, 还可以直接用一个对象包住(把所有的方法都定义在对象之内), 这样在外界如果不通过对象名.方法名, 这种格式的话就无法访问里面的方法, 体现了面向对象的封装性。

摘自 从此爱上蒲肉格蕾铭.-^