Javascript对象在创建它的函数结束后被设置为未定义

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

我使用的是create.js,但是每当
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