Javascript对象在创建它的函数结束后被设置为未定义
我使用的是create.js,但是每当Javascript对象在创建它的函数结束后被设置为未定义,javascript,createjs,Javascript,Createjs,我使用的是create.js,但是每当quequeSetup()结束时,queque就会被设置为未定义,正如console.log()所证明的那样。下面是受影响的代码段 var queue; function init() { queueSetup(); }; function queueSetup() { var queue = new createjs.LoadQueue(false); console.log(queue); queue.install
quequeSetup()
结束时,queque就会被设置为未定义,正如console.log()
所证明的那样。下面是受影响的代码段
var queue;
function init() {
queueSetup();
};
function queueSetup() {
var queue = new createjs.LoadQueue(false);
console.log(queue);
queue.installPlugin(createjs.Sound);
console.log(queue);
queue.addEventListener("complete", queueLoaded);
queue.loadManifest([
{id:"nbckg", src:"images/nbckg.png"},
{id:"newgame", src:"images/newgame.png"}
]);
console.log(queue);
}
function queueLoaded() {
//the following console.log logs undefined
console.log(queue);
compName = "NULLCOMPNAME ";
stage = new createjs.Stage("MyCanvas");
createjs.Ticker.addEventListener("tick", tick);
//LOAD MAINMANU
// loadMainMenu();
initUI();
}
我不熟悉createjs,但在
queueSetup()
中,var queue
创建了一个新变量,名为queue
,作用域为函数。要在函数外部引用队列
变量,请省略变量
,正如其他人所提到的,您试图访问的变量不是全局变量。它仅在queueSetup
函数中可用。您可以声明它window.queue
并完成它,但与其这样做,不如将它返回并传递给queueLoad
函数
function init() {
queueSetup();
};
function queueSetup() {
var queue = new createjs.LoadQueue(false);
console.log(queue);
queue.installPlugin(createjs.Sound);
console.log(queue);
queue.addEventListener("complete", function() {
queueLoaded(queue); // pass the queue variable to our queueLoaded function
});
queue.loadManifest([
{id:"nbckg", src:"images/nbckg.png"},
{id:"newgame", src:"images/newgame.png"}
]);
console.log(queue);
return queue;
}
function queueLoaded(queue) { // add the variable as an argument
//the following console.log logs undefined
console.log(queue);
compName = "NULLCOMPNAME ";
stage = new createjs.Stage("MyCanvas");
createjs.Ticker.addEventListener("tick", tick);
//LOAD MAINMANU
// loadMainMenu();
initUI();
}
删除queueSetup函数中队列变量定义之前的var语句。原始代码在脚本作用域中有一个
queue
变量,该变量被queueSetup()
作用域中的另一个queue
变量隐藏。虽然您建议在全局范围中使用队列
变量,但我认为这是一种不好的做法。最好删除queueSetup()
中的var
关键字,就像Pitaj建议的那样。是的,当然。让我再加上var