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中)