1. JavaScript 是不会禁止你重复定义函数和变量的, 但他只会使用最后定义的版本, 也就是说, 这将导致前面的失效, 令系统出错. 比如, $(id) 是最常用的, 也许你会毫不犹豫的在自己的脚本上定义这个函数, 但是当你用上 prototype, 你就会发现, 它和 prototype 的函数冲突, 并导致你的页面跑不动了. 怎么办? 这时候就需要命名空间了. 我发布的主题里面的 JavaScript 都有用命名空间包起来的, 我这么做就是为了防止和某些插件的代码发生冲突.
2. 如果你要为自己准备一套常用的函数, 或者自己搭建一个 framework, 那这个方法可以使你的代码维护起来更加方便.
看以下代码, 命名空间里面定义了两个函数, 将空间命名为 myNamespace, 并声明了 $ 的对外接口. 也就是说, 我们可以在空间外部通过 myNamespace.$ 来调用 $ 函数, 但 myMethod 函数只能在空间内部使用. 因为外部调用需要通过空间来调用, 所以不会和外部函数发生冲突. 变量同理.
(
function
{
// 通过 ID 获取 Element 对象
function
$(
id)
{
return
document.getElementById
(
id)
;
}
// 显示对应 ID 的对象的节点类型名字
function
myMethod(
id)
{
alert
(
$(
id)
.nodeName
)
;
}
// 这是对外的接口
window[
'myNamespace'
]
=
{
}
window[
'myNameSpace'
]
[
'$'
]
=
$;
}
)
(
)
;