我正在通过代码学校的一个小练习,不知道为什么我必须将函数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();
任何有识之士,为什么我需要的功能传递给一个变量,然后调用变量将不胜感激。我相信我在这里很明显地忽略了这一点。
是否有这个语法的名称? – 2014-12-06 17:25:58
非常感谢 - 解决了问题并给出了原因。我怀疑我也可以直接返回警报而不使用函数,并通过调用buildTicket(parkRides,fastPassQueue,wantsRide)获得相同的结果; – 2014-12-06 17:26:57
人们用匿名版本创建局部范围,即在for循环中有一些可爱的首字母缩略词。 IIFE立即调用函数表达式等。 – Paul 2014-12-06 17:27:12