如果我声明两个具有相同名称和范围的变量会怎样?
var foo = (function() {
return {
alertMe: function() {
alert("foo1");
}
}
})();
var foo = (function() {
return {
alertMe: function() {
alert("foo2");
}
}
})();
foo.alertMe();
我问,因为我在我的网站上动态加载小portlet,每个portlet都有自己的带有JavaScript模块的脚本标记。问题是,用户可以复制portlet,这意味着很可能会出现类似上述情况。
答案 0 :(得分:6)
在您的示例中,它们都是未定义的,因此您的值为undefined
。
无论如何,第二个var
被忽略。您将获得与没有相同的结果,这意味着foo
将被新值覆盖。
所以,结果如同:
var foo = (function() {
alert("foo1");
})();
foo = (function() { // I'm overwriting the value of "foo"
alert("foo2");
})();
编辑:问题中的代码已更改。如果运行代码,结果现在更加可观察。 foo
变量对第一个对象的引用将替换为对第二个对象的引用。第一个参考文献丢失了。
答案 1 :(得分:0)
最后一个变量可以工作, 在您的示例中,将忽略第一个var `var foo =(function(){ 警报( “foo1”); })();
foo =(function(){//我正在覆盖“foo”的值 警报( “foo2的”); })(); `
答案 2 :(得分:0)
为避免此问题,请将不同模块的java脚本封装在不同的名称空间中。
您还可以查看