[英]How can a function accept an undeclared variable as a parameter?
我正在研究新手训练营问题集。 以下问题要求我们根据顾客光顾餐厅的次数来编写回复代码。 一个对象包含客户名称和访问次数。 该函数已传递了'customerName'参数,但尚未声明customerName。 我很困惑为什么没有将对象'customerData'传递给函数,而是传递了实际的键'客户的名字'。 代码如下:
/*Write a function called "greetCustomer".
*
*Given a name, "greetCustomer" returns a greeting based on how many times that
*customer has visited the restaurant. Please refer to the customerData object.
*/
var customerData = {
'Joe': {visits: 1 },
'Carol': {visits: 2 },
'Howard': {visits: 3, },
'Carrie': {visits: 4 }
};
var greetCustomer = function(customerName) {
for (var customer in customerData) {
if (customer === customerName) {
return 'Hello '+ customer + ', welcome back for visit #' + (customerData[customer].visits + 1) + '!';
}
}
return undefined;
};
greetCustomer('Carrie');
customerName
是一个占位符,在此示例中为'Carrie'
。 该值在调用greetCustomer函数时传递。 换句话说,整个函数var greetCustomer
(在定义时)保存在内存中-并且该函数知道它可能已传入了一个参数customerName
。基于您在何处运行它,您甚至可以执行console.log( greetCustomer)查看实际功能及其保存方式。
要解释发生的全部情况:
for..in
循环for..in
customerData对象中的每个键。 undefined
较为简单的解释是:
每次调用该函数时,其参数都保留您传递的值,否则将保持未定义状态
另一个问题是范围问题。当您使用var声明customerData时,最接近的封闭函数(或全局范围)内的所有内容都可以引用它。.知道如何操作范围是很好的:
var // nearest enclosing function
let // nearest enclosing block
(无)//父范围
希望这对您有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.