访问在函数内创建的对象

时间:2017-04-23 21:35:45

标签: javascript function object return

我还在学习,所以我可能会写这个wronf(这可能就是为什么我到目前为止找不到寻找答案的运气)或者我可能一起做错了。

基本上我正在尝试创建一个函数,当调用它时,它将创建一个对象(由其他对象组成)。如果我在函数之外创建这个Characters对象,我可以像我期望的那样访问它,但是当在函数内完成时,我似乎无法访问它。我正在Chrome内置的控制台中对此进行测试。

这是我的代码。

function q1(ans) {      //Are you male or female?   
    "use strict";
    //store all above objects into new object
    if (ans === "male") {
        var Characters = {
            spike: spike,
            jet: jet,
            vicious: vicious
        };
    }
    if (ans === "female") {
    //store all above objects into new object
        var Characters = {
            faye: faye,
            julia: julia,
            ed: ed
        };
    }
    return Characters;
}

(对象spikejetvicious(等)在其他地方定义,无需任何问题即可访问。)

如果我调用我的函数q1("male");,控制台似乎记录了Characters对象的创建,但如果我只是输入Characters来尝试访问它,我会收到错误(ReferenceError) :字符未定义)。如果我要在函数之外创建这个Characters对象,然后尝试如上所述访问它,这可以正常工作。这让我相信我没有正确归还它(或者我正在做其他错误的事情)。我在这里缺少什么?

提前感谢您的任何帮助。

2 个答案:

答案 0 :(得分:2)

这是由于范围。这意味着字符仅存在于函数内部,因此您无法在函数外部访问它。你需要做的是设置一个新的变量,当你调用它时,该变量等于函数的返回值。这样,您可以在函数外部引用返回的变量,并在以后使用它。

 var male = q1("male")

答案 1 :(得分:0)

由于您已经定义了q1范围之外的字符,因此您需要通过从方法返回字符来重新分配Characters变量。

所以重新分配角色,它应该解决问题。 另一个非常糟糕的方法是不使用var Characters,而是使用Characters = ...,但请记住使用全局变量 根本不推荐,而且非常糟糕实践。