Javascript 如何让我通过forEach传递的函数引用其他作用域中的变量?

Javascript 如何让我通过forEach传递的函数引用其他作用域中的变量?,javascript,foreach,Javascript,Foreach,我不知道为什么我的findDroids函数不能引用我的droids函数中的结果变量。当我运行这段代码时,我得到“结果未定义”。非常感谢任何提示/指导。我是Javascript新手,所以请对我放松:) 因为在JSlet中,变量的作用域是其最近的函数。在这种情况下,result仅在droids级别可用。使变量成为全局变量应该可以: let result='';//随处可见 功能机器人(arr){ //let result='';//仅在'droids'级别可用 arr.forEach(findDr

我不知道为什么我的findDroids函数不能引用我的droids函数中的结果变量。当我运行这段代码时,我得到“结果未定义”。非常感谢任何提示/指导。我是Javascript新手,所以请对我放松:)


因为在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";});
}