Javascript 如何让我通过forEach传递的函数引用其他作用域中的变量?
我不知道为什么我的findDroids函数不能引用我的droids函数中的结果变量。当我运行这段代码时,我得到“结果未定义”。非常感谢任何提示/指导。我是Javascript新手,所以请对我放松:)Javascript 如何让我通过forEach传递的函数引用其他作用域中的变量?,javascript,foreach,Javascript,Foreach,我不知道为什么我的findDroids函数不能引用我的droids函数中的结果变量。当我运行这段代码时,我得到“结果未定义”。非常感谢任何提示/指导。我是Javascript新手,所以请对我放松:) 因为在JSlet中,变量的作用域是其最近的函数。在这种情况下,result仅在droids级别可用。使变量成为全局变量应该可以: let result='';//随处可见 功能机器人(arr){ //let result='';//仅在'droids'级别可用 arr.forEach(findDr
因为在JS
let
中,变量的作用域是其最近的函数。在这种情况下,result
仅在droids
级别可用。使变量成为全局变量应该可以:
let result='';//随处可见
功能机器人(arr){
//let result='';//仅在'droids'级别可用
arr.forEach(findDroids);
返回结果;
}
函数finddroid(值、索引、arr){
if(arr[索引]=“机器人”){
result=“找到了机器人!”;
}否则{
result=“这些不是您要找的机器人。”
}
}
//取消这些注释以检查您的工作!
康斯特星球大战=[“卢克”、“芬恩”、“雷伊”、“基洛”、“机器人”]
康斯特王座=[“乔恩”、“丹尼”、“提利昂”、“山”、“瑟曦”]
log(droids(starWars))//应该记录:“找到了droids!”
log(droids(thrones))//应该记录:“这些不是你要找的机器人。”
“一些”建议。检查“includes”的其他示例,这可能是一个更好的工具。因为JS有词法作用域,并且
findDroids
没有在droids
中声明,就像let result
一样。你的问题标题已经表明你知道它在不同的范围内-不,不可能创建变量引用或传递它们。顺便说一句,forEach
在这里似乎是错误的工具。我认为您正在寻找查找
或一些
。“使变量全局化应该可行”-是的,但这是一个可怕的想法。相反,将findDroids
声明移动到droids
函数中。我知道有多种方法可以解决这个问题。将变量移动到全局变量确实有效。也感谢学习一些新方法!谢谢你的提示。
function droids(arr) {
let result = '';
arr.forEach(findDroids);
return result;
}
function findDroids(value, index, arr){
if (arr[index] == "Droids"){
result = "Found Droids!";
} else{
result = "These are not the droids you're looking for."
}
}
// Uncomment these to check your work!
const starWars = ["Luke", "Finn", "Rey", "Kylo", "Droids"]
const thrones = ["Jon", "Danny", "Tyrion", "The Mountain", "Cersei"]
console.log(droids(starWars)) // should log: "Found Droids!"
console.log(droids(thrones)) //should log: "These are not the droids you're looking for."
function droids(arr) {
return arr.some(function(a){return a === "Droids";});
}