Javascript 函数参数和参数

Javascript 函数参数和参数,javascript,Javascript,这里有一个名为displayMenuItems的函数。我正在努力理解函数参数和参数。我不明白为什么这个函数必须有参数(menuItems)。menuItems不会出现在代码中的任何其他地方,也没有为其指定值,所以为什么我必须将其放在那里?我就是想不起来。在我看来,把它放在那里似乎毫无意义 函数显示菜单项(菜单项){ 让displayMenu=menuItems.map(函数(项){ 返回` ${item.title} ${item.price} ${item.desc} `; }); dis

这里有一个名为displayMenuItems的函数。我正在努力理解函数参数和参数。我不明白为什么这个函数必须有参数(menuItems)。menuItems不会出现在代码中的任何其他地方,也没有为其指定值,所以为什么我必须将其放在那里?我就是想不起来。在我看来,把它放在那里似乎毫无意义

函数显示菜单项(菜单项){
让displayMenu=menuItems.map(函数(项){
返回`
${item.title}
${item.price}

${item.desc}

`; }); displayMenu=displayMenu.join(“”); sectionCenter.innerHTML=显示菜单; }
这是因为函数中的代码存在于外部世界之外的另一个上下文中。请参见此示例:

//函数中的第一个和第二个参数
//分别命名为x和y
函数添加(x,y){
返回x+y;
}
//但在外面,我们可以用任何我们喜欢的名字
常数foo=2;
常数棒=3;
日志(添加(foo,bar));
//它甚至不需要是变量
控制台日志(添加(3,4));
//而不是使用基于位置的参数
//我们还可以通过以下方式模拟命名参数:
//使用对象作为唯一参数。
函数减法({x,y}){
返回x-y;
}
//以上是
//函数减法(args){
//返回args.x-args.y;
//}
//不,我们需要使用“名称”x和y
//设置参数

log(subtract({x:5,y:2}))
如果有一个名为
menu
的菜单项数组,则必须将它们传递给函数。该功能在内部将
菜单
称为
menuItems
菜单
菜单项
都是相同的。它们都共享相同的内存地址。此外,
menuItems
是必需的参数,必须是对象数组。
是传入数组中的当前项

所有
项目
对象都必须具有以下属性:
标题
说明
价格
img

sectionCenter
变量在函数外部定义(全局范围),因此必须在函数调用之前知道元素

displayMenu
变量是一个保存连接的HTML字符串的变量。它是由模板文本表达式处理的每个项的映射/联接的输出

const sectionCenter=document.querySelector('.sectionCenter');
常量菜单=[{
标题:"苹果",,
描述:“一个红色的水果”,
价格:1.00,
img:'https://via.placeholder.com/128/F00/FFF?text=Apple'
}, {
标题:"香蕉",,
描述:“一个黄色的水果”,
价格:2.00,
img:'https://via.placeholder.com/128/FF0/000?text=Banana'
}, {
标题:"橙色",,
描述:“一个橘子水果”,
价格:1.50,
img:'https://via.placeholder.com/128/F70/FFF?text=Orange'
}];
//将'menu'的引用传递给函数。
//它在函数中称为“menuItems”。
显示菜单项(菜单);
功能显示菜单项(菜单项){
让displayMenu=menuItems.map(函数(项){
返回`
${item.title}
$${item.price.toFixed(2)}

${item.desc}

`; }); displayMenu=displayMenu.join(“”); sectionCenter.innerHTML=显示菜单; }
。分区中心{
显示器:flex;
对齐项目:居中;
文本对齐:居中;
}
.分区中心.菜单项{
弯曲方向:立柱;
弹性:1;
}

menuItems
用于第一行
menuItems.map
查看它的位置,以便
displayMenuItems()
的调用者可以定义
sectionCenter
的内容应该是什么(menuItems)被声明为将在带有.map的函数中创建的数组的名称?那么它如何知道x是2,y是3?这对我来说毫无意义。menuItems不在函数之外的任何位置。什么与之相关?@Anon2945,因为论点的顺序。在函数中,
add
的第一个参数将作为
x
提供。我仍然感到困惑。我完全理解正在发生的其他一切,但我无法理解这一点。在我的示例中是参数(menuItems),因为我正在使用.map?No创建数组。
map
是数组提供的函数。如果您使用数字1调用
displayMenuItems(1)
,您会得到一个错误,因为数字不提供映射函数(您不能这样做:
1.map()
),但您可以这样做
[1,2]。映射(v=>v+1)
将返回
[2,3]
,您是这样说的吗(menuItems)是否因为函数中的.map创建的数组而存在?因此,本质上,在函数中创建数组之前,我将数组的名称作为参数传递?@Anon2945您将向函数传递一个对象数组。该函数(本地)将那些外部项引用为
menuItems
。数组通过引用传递到函数中。您传入的数组正在转换为新数组。这是一对一的比例。如果源数组有10个项目,则映射数组也将包含10个项目。确定,因此我的代码中的源数组称为“菜单”。如果在我的函数中我给出了参数(menuItems),它如何知道我引用的是名为menu的源数组?为什么我不将menu作为参数传递?@Anon2945当您将变量
menu
传递到函数中时,它(内部)将该变量引用为
menuItems
。它只是一个别名,让函数知道它是传入的,而不是全局访问的。const menu=[{id:1,title:'butter