我不得不重新构建一些古老的代码,并且在很多不同的文件中有相当多的代码。方法是使用揭示模块模式,如JavaScript Module Pattern: In-Depth中所述(跨文件私有状态部分)。
第一个函数表达式效果很好,我可以在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。
我担心我会错过那种令人眼花缭乱的显而易见的事情,并且非常想明白为什么这不起作用。我还需要让它工作,所以非常感谢任何帮助(将文件合并为一个不是一个选项)。
答案 0 :(得分:0)
尝试
var test = (function ($, ns, undefined)
{
function test1()
{
console.log("executing test1");
ns.testx.test2();
}
ns.test1 = test1;
return ns;
}(jQuery, test || {}));
console.log(test);
var test = (function ($, ns, undefined)
{
ns.testx = (function ()
{
function test2()
{
console.log("executing test2");
}
return { test2: test2 }
})();
return ns;
/*
This will be
{
test1: test1,
testx: {
test2: test2
}
}
*/
}(jQuery, test || {}));