我是JavaScript新手,正在從在線教程中學習它。當前的表達式是關於函數表達式的使用,特別是 - 從函數內部返回函數表達式。錯誤/ Javascript中的警告:循環內的函數
下面的代碼:
//array of all available rides, with respective wait times
var parkRides = [["Birch Bumpers", 40], ["Pines Plunge", 55], ["Cedar Coaster", 20], ["Ferris Wheel of Firs", 90]];
//array of fast pass rides, indicating next up ride
var fastPassQueue = ["Cedar Coaster", "Pines Plunge", "Birch Bumpers", "Pines Plunge"];
//function to build fast pass queue using array
function buildTicket(allRides, passRides, pick) {
//if user has picked the first ride in fast pass queue, alert so...
if(pick == passRides[0]) {
//remove first item from queue using shift and store it in a var
var pass = passRides.shift();
//return function expression here
return function() {
alert("QuicK!! You've got a fast pass to " + pass + "!");
}; //return ends with a ;
}
else {
for (var i = 0; i < allRides.length; i++) {
if(pick == allRides[i][0]) {
//return a function expression here
return function() {
alert("A ticket is printing for " + allRides[i][0] +"!\n"+ " Your wait time is about " + allRides[i][1] + " minutes.");
};
}
}
}
}
//use function buildticket
var wantsRide = "Pines Plunge";
var ticket = buildTicket(parkRides, fastPassQueue, wantsRide);
//execute function expression by calling ticket()
ticket();
我使用微軟的Visual Studio代碼,並在代碼的最後,我得到一個錯誤,一個警告,即使代碼成功的作品,我也得到所需結果取決於wantsRide
變量。但是,我沒有理解錯誤和警告的原因。
在屏幕底部(下面的屏幕截圖),我得到1個十字和1個感嘆號圖標,我假設這意味着1個錯誤和1個警告。
但是,當我點擊它,我得到的,說! Function inside loop
和這些行強調欄的頂部突出顯示的區域:
return function() {
alert("A ticket is printing for " + allRides[i][0] +"!\n"+ " Your wait time is about " + allRides[i][3] + " minutes.");
};
似乎什麼成爲這裏的問題?我知道這是for
循環內的函數表達式,但爲什麼會生成警告?是因爲它的if(pick==allRides[i][0])
聲明可能永遠不會是真的,所以函數表達式永遠不會被執行?
這是一個警告,您的代碼可能有這裏描述的問題:http://stackoverflow.com/questions/1451009/javascript-infamous-loop-issue – Barmar
但在這種情況下,它沒有問題,因爲它在創建函數時也會返回到循環外。 – Barmar
@Barmar - 你正在使用的棉絨不夠聰明,以確定這一點。 – Quentin