Javascript 对Array.prototype.some()的质疑

Javascript 对Array.prototype.some()的质疑,javascript,json,Javascript,Json,这段代码来自freeCodeCamp挑战。它是有效的。但我需要一些澄清。在本练习中,是关于在调用查找函数时读取json数组以提取给定firstName属性的值。此外,在读取其值之前,请检查该属性是否存在 当contacts.some声明回调函数(arg){…}时,“arg”似乎已经知道调用查找函数时传递的“firstName”和“prop”参数 //设置 var触点=[ { “名字”:“Akira”, “姓氏”:“莱恩”, “编号”:“0543236543”, “喜欢”:[“披萨”、“编码”、

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

contacts.some声明回调函数(arg){…}
时,“arg”似乎已经知道调用查找函数时传递的“firstName”和“prop”参数

//设置
var触点=[
{
“名字”:“Akira”,
“姓氏”:“莱恩”,
“编号”:“0543236543”,
“喜欢”:[“披萨”、“编码”、“布朗尼点数”]
},
{
“名字”:“哈利”,
“姓氏”:“波特”,
“编号”:“0994372684”,
“喜欢”:[“霍格沃茨”、“魔法”、“海格”]
},
{
“名字”:“夏洛克”,
“姓氏”:“福尔摩斯”,
“编号”:“0487345643”,
“喜欢”:[“有趣的案例”,“小提琴”]
},
{
“名字”:“克里斯蒂安”,
“姓氏”:“Vos”,
“编号”:“未知”,
“喜欢”:[“Javascript”、“游戏”、“狐狸”]
}
];
函数查找(名字,道具){
//仅更改此行下方的代码
var answer=“无此类联系”;
contacts.some(函数(arg){
if(arg.firstName==firstName&&arg.hasOwnProperty(prop)==true){
答案=arg[prop];
}else if(参数hasOwnProperty(prop)==false){
回答=“无此类财产”;
}
});
返回答案;
//仅更改此行上方的代码
}
//更改这些值以测试您的函数

查找(“克里斯蒂安”、“姓氏”)编写的函数包含逻辑错误,这将阻止它执行其设计的操作。但是,我将专门解决您的问题,即回调如何在数组项中查看
查找
函数的参数和属性

在JavaScript中,在给定范围内定义的函数可以看到它们所在范围内的变量。例如:

var variable = 5;

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

  ...
  incrementVariable();
  ...
}

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

function doSomething()
{
  var variable = 5;

  function incrementVariable()
  {
    variable++;
  }

  ...
  incrementVariable();
  ...
}
函数的参数只是另一种类型的变量,例如:

var variable = 5;

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

  ...
  incrementVariable();
  ...
}

doSomething(5);
在您发布的
lookUp
函数中,
contacts.some(…)
的参数是
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中,在给定范围内定义的函数可以看到它们所在范围内的变量。例如:

var variable = 5;

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

  ...
  incrementVariable();
  ...
}

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

function doSomething()
{
  var variable = 5;

  function incrementVariable()
  {
    variable++;
  }

  ...
  incrementVariable();
  ...
}
函数的参数只是另一种类型的变量,例如:

var variable = 5;

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

  ...
  incrementVariable();
  ...
}

doSomething(5);
在您发布的
lookUp
函数中,
contacts.some(…)
的参数是
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”
“…它是关于读取json数组的”不,它是关于读取数组的。不涉及JSON。JSON是用于数据交换的文本表示法。如果您处理的是JavaScript源代码,而不是字符串,那么您就不是在处理JSON。这在文档中都有解释,请注意,您发现那里的代码非常糟糕,请参阅我的评论,以获得原因的简明版本(这些正是我在快速浏览中提到的)。@TedHopp:True,虽然代码误用了
某些
并依赖闭包可能没有帮助。”…这是关于读取json数组的“不,这是关于读取数组的。不涉及JSON。JSON是用于数据交换的文本表示法。如果您正在处理JavaSc