Jane Doloop:不解JavaScript中processPassengers函数循环行逻辑
解答你的JavaScript代码疑问
嘿Jane!别着急,我来帮你捋清楚这段代码里的逻辑~先把你没写完的代码补全(看起来是passengers.length的拼写被截断了),完整的processPassengers函数应该是这样的:
var passengers = [ { name: "Jane Doloop", paid: true, ticket: "coach" }, { name: "Dr. Evel", paid: true, ticket: "firstclass" }, { name: "Sue Property", paid: false, ticket: "firstclass" }, { name: "John Funcall", paid: true, ticket: "premium" } ]; function processPassengers(passengers, testfunction) { for(var i=0;i<passengers.length;i++) { // 通常这里会调用传入的testfunction处理当前乘客 testfunction(passengers[i]); } }
接下来给你拆解循环部分(也就是你标记的核心逻辑):
var i=0:初始化循环计数器i为0,因为JavaScript数组的索引是从0开始的,第一个乘客对应的数组位置是passengers[0]。i<passengers.length:这是循环的终止条件——只要计数器i小于乘客数组的总长度,循环就会继续执行。比如你的数组里有4个乘客,passengers.length的值是4,所以i会依次取0、1、2、3,刚好覆盖数组里的每一个乘客元素(当i变成4时,条件不成立,循环停止)。i++:每次循环结束后,把计数器i加1,这样下一次循环就能访问数组里的下一个乘客。
这个processPassengers函数的妙处在于它是一个高阶函数:把遍历数组的通用逻辑封装起来,然后通过传入不同的testfunction,就能实现不同的业务需求——比如检查乘客是否付费、给头等舱乘客发饮品、统计已购票人数等等,不用每次都写一遍遍历数组的代码。
举个实际使用的例子,如果你想打印所有已付费乘客的名字,可以这么写:
function logPaidPassengers(passenger) { if (passenger.paid) { console.log(`${passenger.name} 已完成付费`); } } // 调用processPassengers,传入我们定义的处理函数 processPassengers(passengers, logPaidPassengers);
运行这段代码后,控制台会输出:
Jane Doloop 已完成付费
Dr. Evel 已完成付费
John Funcall 已完成付费
如果你的代码里还有其他标记的细节没写完,可以补充出来,我再帮你深入解释~
内容的提问来源于stack exchange,提问作者Vikki
相关产品推荐
相关产品推荐

