我还在学习,所以我可能会写这个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;
}
(对象spike
,jet
,vicious
(等)在其他地方定义,无需任何问题即可访问。)
如果我调用我的函数q1("male");
,控制台似乎记录了Characters
对象的创建,但如果我只是输入Characters
来尝试访问它,我会收到错误(ReferenceError) :字符未定义)。如果我要在函数之外创建这个Characters对象,然后尝试如上所述访问它,这可以正常工作。这让我相信我没有正确归还它(或者我正在做其他错误的事情)。我在这里缺少什么?
提前感谢您的任何帮助。
答案 0 :(得分:2)
这是由于范围。这意味着字符仅存在于函数内部,因此您无法在函数外部访问它。你需要做的是设置一个新的变量,当你调用它时,该变量等于函数的返回值。这样,您可以在函数外部引用返回的变量,并在以后使用它。
var male = q1("male")
答案 1 :(得分:0)
由于您已经定义了q1
范围之外的字符,因此您需要通过从方法返回字符来重新分配Characters
变量。
所以重新分配角色,它应该解决问题。
另一个非常糟糕的方法是不使用var Characters
,而是使用Characters = ...
,但请记住使用全局变量 根本不推荐,而且非常糟糕实践。