Я работаю через небольшое упражнение из школы кодов и не могу понять, почему мне нужно передать функцию 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 (parkRides, fastPassQueue, needsRide); –
Существуют некоторые симпатичные аббревиатуры для анонимной версии, которую люди используют для создания локальных областей, то есть в цикле for. IIFE Немедленно вызывается выражение функции и т. Д. – Paul