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

Javascript object gets set to undefined after function that creates it ends

本文关键字:设置 未定义 结束 函数 对象 创建 Javascript      更新时间:2023-09-26

我正在使用create.js,但是每当quequeSetup()结束队列被设置为未定义时,就像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的新变量,作用域为该函数。要在函数外部引用queue变量,请省略var

正如其他人提到的,您正在尝试访问一个不是全局变量的变量。它只在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();
}