【发布时间】:2015-07-04 16:40:59
【问题描述】:
我不得不重组一些古老的代码,而且在许多不同的文件中都有相当多的代码。该方法是使用揭示模块模式,如JavaScript Module Pattern: In-Depth(Cross-File Private State 部分)中所述。
第一个函数表达式效果很好,我可以在 Firebug 中看到函数组件也在第二个块中正确分配。但随后变量突然变为未定义。
我整理了一个简化的example,控制台显示第二次赋值后变量未定义。
var test = (function ($, ns, undefined)
{
function test1()
{
console.log("executing test1");
ns.testx.test2();
}
return { test1: test1 };
}(jQuery, test || {}));
console.log(test);
var test = (function ($, ns, undefined)
{
ns.testx = (function ()
{
function test2()
{
console.log("executing test2");
}
return { test2: test2 }
})();
}(jQuery, test || {}));
console.log(test);
// DOM ready
$(function ()
{
test.test1();
});
几个变体,例如在顶部只定义一次变量也不起作用。如果交换两个函数表达式,则执行测试 1,但 ns.testx 未定义。
我担心我错过了令人眼花缭乱的显而易见的事情,并且真的很想了解为什么这不起作用。我还需要让它工作,因此非常感谢任何帮助(将文件合并为一个不是一种选择)。
【问题讨论】:
标签: closures