gpt4 book ai didi

javascript - 为什么我不能直接调用函数?

转载 作者:行者123 更新时间:2023-11-30 08:01:23 25 4
gpt4 key购买 nike

我正在完成代码学校的一个小练习,无法弄清楚为什么我必须将函数 buildTicket(parkRides, fastPassQueue, wantsRide); 传递给一个变量,然后在使这个脚本工作的变量。

下面的代码将不会执行(我没有将函数分配给变量):

var parkRides = [
["Birch Bumpers", 40],
["Pines Plunge", 55],
["Cedar Coaster", 20],
["Ferris Wheel", 90]
];

var fastPassQueue = ["Cedar Coaster", "Pines Plunge", "Birch Bumpers", "Pines Plunge"];

var wantsRide = "Birch Bumpers";

function buildTicket(allRides, passRides, pick) {
if(passRides[0]==pick){
var pass = passRides.shift();
return function(){
alert("Quick you have a fast pass to "+pass+"!");
};
} else {
for(var i = 0; i<allRides.length; i++){
if(allRides[i][0] == pick){
return function (){
alert("A ticket is printing for "+pick+"!\n"+
"Your wait time is about "+allRides[i][1]+" minutes.");
};
}
}
}
}

buildTicket(parkRides, fastPassQueue, wantsRide);

但是如果我添加 var ticket = buildTicket(parkRides, fastPassQueue, wantsRide); ticket(); 它工作正常。完整代码如下:

var parkRides = [
["Birch Bumpers", 40],
["Pines Plunge", 55],
["Cedar Coaster", 20],
["Ferris Wheel", 90]
];

var fastPassQueue = ["Cedar Coaster", "Pines Plunge", "Birch Bumpers", "Pines Plunge"];

var wantsRide = "Birch Bumpers";

function buildTicket(allRides, passRides, pick){
if(passRides[0]==pick) {
var pass = passRides.shift();
return function(){
alert("Quick you have a fast pass to "+pass+"!");
};
} else {
for(var i = 0; i<allRides.length; i++){
if(allRides[i][0] == pick){
return function (){
alert("A ticket is printing for "+pick+"!\n"+
"Your wait time is about "+allRides[i][1]+" minutes.");
};
}
}
}
}

var ticket = buildTicket(parkRides, fastPassQueue, wantsRide);

ticket();

任何关于为什么我需要将函数传递给变量然后调用该变量的见解将不胜感激。我确信我错过了这里显而易见的东西。

最佳答案

您的 buildTicket 函数返回一个不使用参数的函数。

例如,在您的代码中,它返回一个函数:

 return function(){alert("Quick you have a fast pass to "+pass+"!");
};

您可以使用以下语法立即调用返回的函数:

buildTicket(parkRides, fastPassQueue, wantsRide)();

您还可以更改 function buildTicket 中的 return 行以立即提醒而不是返回函数,但这可能会破坏 buildTicket 的其他用途> 希望它返回一个函数,从而延迟该警报,以便稍后在需要时可能在代码中的特定点显示。

关于javascript - 为什么我不能直接调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27334231/

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