gpt4 book ai didi

javascript - 关于Array.prototype.some()的疑问

转载 作者:行者123 更新时间:2023-11-28 18:09:41 24 4
gpt4 key购买 nike

这段代码来自 freeCodeCamp 挑战赛。它有效。但我需要一些澄清。在练习中,它是关于在调用 lookUp 函数 时读取 json 数组以提取给定 firstName 属性的值。另外,在读取其值之前检查此类属性是否存在。

contacts.some 声明回调 function (arg) {...} 时,似乎 'arg' 已经知道 'firstName' 和 'prop'调用lookUp函数时传递的参数。

//Setup
var contacts = [
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
}
];

function lookUp(firstName, prop) {
// Only change code below this line
var answer = "No such contact";
contacts.some(function(arg) {
if (arg.firstName === firstName && arg.hasOwnProperty(prop) === true) {
answer = arg[prop];
} else if (arg.hasOwnProperty(prop) === false) {
answer = "No such property";
}
});
return answer;
// Only change code above this line
}

// Change these values to test your function
lookUp("Kristian", "lastName");

我不明白魔力在哪里。为什么“arg”包含两个参数的值?谁能解释一下这是怎么发生的?

提前致谢。卡洛斯。

最佳答案

所编写的函数包含逻辑错误,这将阻止它执行其设计目的。不过,我将具体解决您的问题,即回调如何查看数组项中的 lookUp 函数的参数和属性。

在 JavaScript 中,给定作用域内定义的函数可以查看其所在作用域中的变量。因此,例如:

var variable = 5;

function incrementVariable()
{
variable++;
}

在此示例中,incrementVariable 可以看到变量 variable,即使它是在函数外部定义的。在此示例中,variable 是全局的,但这可以在另一个函数内部完成:

function doSomething()
{
var variable = 5;

function incrementVariable()
{
variable++;
}

...
incrementVariable();
...
}

函数的参数只是另一种类型的变量,例如:

function doSomething(variable)
{
function incrementVariable()
{
variable++;
}

...
incrementVariable();
...
}

doSomething(5);

在您发布的 lookUp 函数中,contacts.some(..) 的参数是在 中定义的 function LookUp 函数,因此它可以“看到”lookUp 函数本身可以看到的所有内容,包括其参数。

这种类型的共享范围的技术术语是“闭包”。

回调函数的arg参数由some()函数本身正在执行的操作定义。对于 contacts 数组中的每个元素都会调用一次回调。因此,例如,第一个回调在 arg 中包含以下内容:

{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
}

因此,回调可以看到 firstName(lookUp 的参数)和 arg.firstName(在本例中为字符串 "Akira"。同样,如果 prop"number",则 arg[prop] 指的是 "number" > 该对象中的属性,在本例中为“0543236543”

关于javascript - 关于Array.prototype.some()的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41880700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com