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



我不知道为什么我的findDroids函数不能引用droids果变量。当我运行这个代码时;结果未定义";。如有任何提示/指导,我们将不胜感激。我是Javascript的新手,所以请对我宽容一点:(

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."

因为在JS中,let变量的作用域是最接近的函数。在这种情况下,result仅在droids级别可用。使变量全局化应该有效:

let result = ''; // Available everywhere
function droids(arr) {
//let result = ''; // Available only at `droids` level
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."

话虽如此,使用全局变量可能不是最好的选择。您可以在带有haystack.includes(needle)haystack中找到needle,以便轻松检查数组是否包含您要查找的值:

const arr = ["qqq", "www", "eee"]
console.log(arr.includes("qqq") ? "Found droids" : "Not found")
console.log(arr.includes("zzz") ? "Found droids" : "Not found")

function droids(arr) {
return arr.some(function(a){return a === "Droids";});
}

一些建议。查看其他示例中的"includes",这可能是一个更好的工作工具。

最新更新