頭首先阿賈克斯,他們給了下面的例子:引用函數(例如,在Javascript中)意味着什麼?
function getDetails(itemName) {
request = createRequest();
if (request == null) {
alert("Unable to create request");
return;
}
var url= "getDetails.php?ImageID=" + escape(itemName);
request.open("GET", url, true);
request.onreadystatechange = displayDetails;//This references the function below
request.send(null);
}
function displayDetails() {
if (request.readyState == 4) {
if (request.status == 200) {
detailDiv = document.getElementById("description");
detailDiv.innerHTML = request.responseText;
}
}
}
我很好奇,什麼樣的建築是request.onreadystatechange = displayDetails;
。這本書說,「這是一個函數的引用,而不是函數調用」。不過我不明白這個真是的意思。我想它會將displayDetails
函數賦值給對象request.onreadystatechange
,但我不明白爲什麼或何時使用這種構造。
例如,什麼是使用這種結構,而不是做類似的優勢:
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 200) {
detailDiv = document.getElementById("description");
detailDiv.innerHTML = request.responseText;
}
}
}
而且,是一個功能性的語言特性的一個例子嗎?
老實說,發佈的第一個代碼塊是sl as的,因爲它污染了全球範圍。使用命名函數進行回調的原因是,您還需要在別處明確調用該函數。 – Shmiddty
問題的標題說的是Javascript,但是在您說'Head First Java'的問題中。代碼看起來像Javascript,而不是Java。那是對的嗎? – shargors
IMO它保持乾淨。雖然上面的人說這個例子有點sl。。你還知道當你寫'request.onreadystatechange = function(){...}'時,你實際上正在分配'anonymous' javascript函數的_reference_嗎? –