创建一个独立于其他JavaScript的私有命名空间?

时间:2011-05-20 00:47:53

标签: javascript

我正在创建一个可以在各种网站上使用的脚本。由于我不知道它的使用情况,我希望能够将它放在各种沙箱中,它不会影响页面上的其他javascripts,反过来也不受其他javascripts的影响。< / p>

最基本的开始是使用自我调用函数:

(function(){
   x = function(){ alert('hi!');
   x();
})();

但我的问题是,如果已经分配了x,则无法覆盖它:

x = function(){ alert('too late!');
(function(){
   x = function(){ alert('hi!');
   x();
})();

这会警告“太迟了!”而不是“嗨!”,这不是我想要的效果。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

不要忘记使用var语句,如果不使用它,变量将在全局范围内声明。但是,你在正确的轨道上,在一个立即执行的功能中创建自己的范围。例如:

var x = function() { alert('foo') };
(function() {
    var x = function() { alert('bar') }
    x() // 'bar'
}());
x() // 'foo'

回到你的例子:

x = function(){ alert('too late!')};
(function(){
   x = function(){ alert('hi!')};
   x(); // 'hi'
})();
x(); // 'hi'

这将警告'hi'两次,因为没有var语句,您在两个范围内使用相同的x值。如果您在自执行函数中使用var语句,则x的第二次调用会提醒'太晚了!'。

答案 1 :(得分:1)

在这两种情况下,您都忘了在}部分之后添加alert()

看看这个小提琴:jsfiddle.net/XSebK/2/ - 它实际上按预期工作,代码如下:

x = function(){ alert('too late!'); };

(function(){
    x = function(){ alert('hi!'); }
    x();
})();