Javascript 在不使用全局变量的情况下访问另一个函数中的局部变量

Javascript 在不使用全局变量的情况下访问另一个函数中的局部变量,javascript,function,variables,local,Javascript,Function,Variables,Local,我需要将多个文本区域的值与对象的属性相匹配。只有在以下情况下才应匹配: 正在使用的textarea的值等于对象和中包含的人名 如果textarea的索引等于此人的ID(参见 我的小提琴中的布尔:) 为此,我需要从该函数访问对象test={}: function make_test(name, job, ID) { var test = {}; //local variable to be used in 'function suggest(index)' test.name =

我需要将多个
文本区域的值与对象的属性相匹配。只有在以下情况下才应匹配:

  • 正在使用的
    textarea
    的值等于对象中包含的人名
  • 如果textarea的索引等于此人的ID(参见 我的小提琴中的布尔:)
  • 为此,我需要从该函数访问对象
    test={}

    function make_test(name, job, ID) {
        var test = {}; //local variable to be used in 'function suggest(index)'
        test.name = name;
        test.job = job;
        test.ID = ID;
        return test;
    }
    new make_test("Paul", "manager", 1);
    new make_test("John", "employee", 2);
    new make_test("Jan", "employee", 2);
    
    在这个里面:

    function suggest(index) {
        if (test.ID === index && test.name == thisInput.value) {
            thisOutput.innerHTML = "Has job : " + test.job;  //should access 'test' properties : test.name, test.job, test.ID
        }
    }
    
    问题是声明
    test={}
    作为全局变量,只允许
    函数suggest(index)
    查找'Jan',因为它是我最后声明的一个。但是如果我声明
    var test={}
    作为一个局部变量,它根本不起作用,因为
    函数建议(索引)
    无法访问
    var test={}来自外部

    这就是我被困的地方。我的目标是访问
    var test={}
    suggest()
    中,根据每个人的
    姓名
    ID
    获得他们的工作


    感谢您的帮助

    按照@nnnnnn的建议,您可以将
    make\u test
    返回的对象存储在数组中;将数组传递给
    suggest
    ,使用
    array.prototype.forEach()
    迭代数组

    window.onload=function(){
    函数make_测试(名称、作业、ID){
    var test={};//要在“函数建议(索引)”中使用的局部变量
    test.name=名称;
    test.job=作业;
    test.ID=ID;
    回归试验;
    }
    var thisInput=document.querySelector(“输入”);
    var thisOutput=document.querySelector(“输出”);
    var-arr=[];
    arr.push(进行测试(“保罗”,“经理”,1),
    新的make_测试(“John”,“employee”,2),
    新make_测试(“Jan”,“employee”,2));
    功能建议(索引、arr){
    arr.forEach(功能(测试){
    if(test.ID==index&&test.name==thisInput.value){
    thisOutput.innerHTML=“Has job:”+test.job;
    }
    })
    }
    建议(1,arr);
    }

    根据@nnnnnn的建议,您可以将
    make\u test
    返回的对象存储在一个数组中;将数组传递给
    suggest
    ,使用
    array.prototype.forEach()
    迭代数组

    window.onload=function(){
    函数make_测试(名称、作业、ID){
    var test={};//要在“函数建议(索引)”中使用的局部变量
    test.name=名称;
    test.job=作业;
    test.ID=ID;
    回归试验;
    }
    var thisInput=document.querySelector(“输入”);
    var thisOutput=document.querySelector(“输出”);
    var-arr=[];
    arr.push(进行测试(“保罗”,“经理”,1),
    新的make_测试(“John”,“employee”,2),
    新make_测试(“Jan”,“employee”,2));
    功能建议(索引、arr){
    arr.forEach(功能(测试){
    if(test.ID==index&&test.name==thisInput.value){
    thisOutput.innerHTML=“Has job:”+test.job;
    }
    })
    }
    建议(1,arr);
    }

    鉴于您的员工ID似乎不是唯一的,我建议您将所有人员存储在一个数组中,然后在您的
    suggest()
    函数中,您可以搜索整个数组以检查匹配项(单击“运行代码片段”进行尝试):

    函数生成测试(名称、作业、ID){
    var检验={};
    test.name=名称;
    test.job=作业;
    test.ID=ID;
    回归试验;
    }
    var people=[];
    推(make_test(“Paul”,“manager”,1));
    推送(make_测试(“John”,“employee”,2));
    推送(make_测试(“Jan”,“employee”,2));
    功能建议(索引){
    var thisInput=document.getElementById(“textarea”+索引);
    var thisOutput=document.getElementById(“输出”+索引);
    thisOutput.innerHTML=“有作业:”;
    for(var i=0;i
    
    有工作:
    有工作:
    
    鉴于您的员工ID似乎不是唯一的,我建议您将所有人员存储在一个数组中,然后在您的
    suggest()
    函数中,您可以搜索整个数组以检查匹配项(单击“运行代码片段”进行尝试):

    函数生成测试(名称、作业、ID){
    var检验={};
    test.name=名称;
    test.job=作业;
    test.ID=ID;
    回归试验;
    }
    var people=[];
    推(make_test(“Paul”,“manager”,1));
    推送(make_测试(“John”,“employee”,2));
    推送(make_测试(“Jan”,“employee”,2));
    功能建议(索引){
    var thisInput=document.getElementById(“textarea”+索引);
    var thisOutput=document.getElementById(“输出”+索引);
    thisOutput.innerHTML=“有作业:”;
    for(var i=0;i
    
    有工作:
    有工作:
    
    您需要一个数组来保存对所有人的引用,或者,如果员工ID是唯一的(在您的示例中不是唯一的),您可以使用对象而不是数组。另外,调用函数时不需要
    new
    。因此:
    var员工=[];推送(make_测试(…)
    @Jecoms有人建议OP问另一个关于
    建议
    函数@nnnnnn的问题:这是我一开始试图做的,但是,除非我在数组中推送对象,否则它们不会有我需要匹配的其他两个属性(作业和ID)?我最初希望避免使用对象数组,因为迭代数组加上对象将多次打印相同的结果。不过,我可能错了,因为我仍在努力扩展我在JavaScription中的知识,您需要一个数组来保存对所有人的引用,或者,如果员工ID是唯一的(它不是在y中)