我正在通過代碼學校的一個小練習,不知道爲什麼我必須將函數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