我有一个javascript文件,声明下面的变量:
var page = page || {};
上述文件包含在另一个想要使用页面变量的javascript文件中。在尝试输入时,我可以在intellisense中看到该变量。
但是在运行时,我收到的错误是:
页面未定义。
我发布了更详细的代码:
第一个文件是只有一行的page.js
var page = page || {};
第二个文件使用上述变量:
/// <reference path="page.js" />
page.current = function () {
};
有最后的第三个文件:
/// <reference path="../pagescripts/page-current.js" />
define(function () {
var Agencies = function (app, datacontext, logger, config, router) {
var myPage = page.current;
//The above line throws error saying page is not defined.
});
};
答案 0 :(得分:2)
在跨多个文件使用相同的命名空间对象时,通常会使用此模式。通过
var page = page || {};
在每个文件的顶部触及该命名空间,您可以保证page
将指向同一个对象,并且您可以按任意顺序加载它们,如果您的代码许可证。
// page1.js
var page = page || {};
page.doSomething = function() {};
// page2.js
var page = page || {}
page.doSomethingElse = function() {};
// page3.js
var page = page || {};
page.doThirdThing = function() {};
答案 1 :(得分:1)
确保在使用它的文件/脚本标记之前加载定义变量的javascript文件。
答案 2 :(得分:-3)
如果由于某种原因无法更改脚本文件加载的顺序,则可以使用dom onready函数来访问此变量。根据经验,你应该延迟逻辑的执行,直到dom准备好。例如在jQuery中你可以使用
$(document).ready(function() {
// application init logic
// or start execution of functions
if(page && page.whatever) {
page.whatever();
}
})