zer*_*ero 31 javascript closures namespaces global-variables
我正在努力提高我对javascript中全局命名空间的理解,我对以下几点感到好奇:
有一个"GOD"(即父对象)对象,所有对象(因为除了基元之外的所有东西都是对象)要回答,如果是,那么该对象是"窗口"吗?
为什么在全球范围内拥有变量/函数是个坏主意?
如果在全局范围内拥有vars /函数真的是个坏主意那么闭包是避免这种情况的最佳方法吗?例:
function parent(){
var x = 'some value';//this var would be considered global to all children functions but not in the true global namespace
function child1(){
x.someMethod()
}
function child2(){
x*something;
}
function child3(){
x+=something;
child2()
child1()
}
child3()
}
parent()
Run Code Online (Sandbox Code Playgroud)Mat*_*att 26
是否有一个神(即父)对象?
是.从技术上讲,所有这些原语都是其成员的全球对象; 它恰好发生在浏览器中,该window
对象是全局对象.
> window.String === String;
true
Run Code Online (Sandbox Code Playgroud)为什么在全球范围内拥有变量/功能是不错的主意?
因为如果你要添加许多第三方库/脚本,它们都共享相同的全局对象,那么就有可能发生名称冲突.这是一个真实的问题,所有库都$
用作别名(jQuery,Prototype等).
如果在全局范围内拥有vars /函数真的是一个坏主意那么闭包是避免这种情况的最佳方法吗?
x
不应被视为全球性的.它是通过在函数内声明子函数而形成的闭包的一部分parent()
.你的代码片段的问题部分parent()
是全局的; 如果其他一些代码重新声明会发生什么parent()
?这会更好:
(function () {
function parent(){
var x = 'some value';
function child1(){
x.someMethod()
}
function child2(){
x*something;
}
function child3(){
x+=something;
child2()
child1()
}
child3()
}
parent()
}());
Run Code Online (Sandbox Code Playgroud)
事实x
是儿童功能可以获得并不坏; 你应该自己编写这些函数,所以你应该知道它的存在x
.请记住,如果您x
在这些子函数中重新声明var
,则不会影响x
in parent()
.
归档时间: |
|
查看次数: |
22761 次 |
最近记录: |