我们可以重用var名称而不会在JavaScript中覆盖其详细信息。请参阅下面的扩充模块模式示例
<script>
var Module = (function () {
// Module object
var module = {},
privateVariable = "Hello World";
function privateMethod() {
// ...
}
module.publicProperty = "Foobar";
module.publicMethod = function () {
//console.log( privateVariable );
return privateVariable;
};
return module;
})();
//Defining same name MODULE var again
var Module = (function (my) {
var newvar = 999;
my.anotherMethod = function () {
return newvar;
};
return my;
}(Module));
alert(Module.publicMethod());
//How this upper MODULE property is accessible ? Should be hide by
//next same name MODULE var?**
alert(Module.anotherMethod());
</script>
上面的代码运行完全正常,并在MODULE下添加了另一个AnotherMethod,但它仍然是如何访问初始模块属性。定义具有相同名称的var(MODULE)不应覆盖(删除)上层模块。
答案 0 :(得分:0)
定义具有相同名称的var(MODULE)不得覆盖(删除)上层模块。
是的,应该。
扫描全局范围(或函数内部的函数)以查找var
语句。由于您有两个相同的,第二个被忽略。 MODULE
是在全局范围内创建的。
然后运行一个函数,然后将其返回值赋给MODULE
。
然后运行另一个函数,将当前值MODULE
作为参数传递给它,然后将返回值赋给MODULE
。
在var my = {}
创建的对象的引用仍然存在于第二个函数的范围内,但是全局范围内对它的唯一引用已被覆盖。