我試圖用setTimeout
執行一些語句,這實際上是在getSendingJSON("/plot",args,plotReglaFalsa)
問題與回調
這是回調函數執行plotReglaFalsa
內執行的函數內部setTimeout函數的變量是代碼段的句子被執行通過setTimeout
:
for (series in respuesta) {
if (series != "x" && series != "y" && series != "raiz") {
setTimeout(function(respuesta,series){plot.highlight(c,[respuesta[series].a,0])},1500)
setTimeout(function(respuesta,series){plot.highlight(c,[respuesta[series].b,0])},1800)
c++
}
}
這裏的問題是,respuesta等系列實際上是現有一旦回調發生。
當我嘗試運行我得到以下控制檯輸出:
TypeError: series is undefined ...Timeout(function(respuesta,series){plot.highlight(c,[respuesta[series].a,0])},15... 16 biseccion.js (line 50) TypeError: series is undefined ...Timeout(function(respuesta,series){plot.highlight(c,[respuesta[series].b,0])},18...
這是我的全部代碼:
function plotReglaFalsa(respuesta) {
var result = []
result.push({
label: "fx",
color: "red",
data: _.zip(respuesta['x'], respuesta['y'])
})
for (series in respuesta) {
if (series != "x" && series != "y" && series != "raiz") {
result.push({
color: "blue",
data: [[]]
})
}
}
var plot = $.plot( $("#placeholder"),
result,
{ selection:{mode: "xy"},
zoom: { interactive: true },
pan: { interactive: true },
grid: { markings: [{ xaxis: { from: 0.0, to: 0.0 }, color: 'black', lineWidth: 2 }, { yaxis: { from: 0.0, to: 0.0 }, color: 'black', lineWidth: 2 }] }
})
plot.getOptions().selection.mode = null
var c = 1
for (series in respuesta) {
if (series != "x" && series != "y" && series != "raiz") {
setTimeout(function(respuesta,series){plot.highlight(c,[respuesta[series].a,0])},1500)
setTimeout(function(respuesta,series){plot.highlight(c,[respuesta[series].b,0])},1800)
c++
}
}
}
getSendingJSON("/plot",args,plotReglaFalsa)
function resaltarPuntos(plot,respuesta,series,c,x){
plot.highlight(c,[respuesta[series].x,0])
}
function desResaltarPuntos(plot){
plot.unhighlight()
}
getSendingJSON
實際上是AJAX。我怎樣才能完成這項工作?
可能重複[臭名昭著的Javascript循環問題?(http://stackoverflow.com/questions/1451009/javascript-infamous-loop-issue) – elclanrs
你傳遞你的函數'的setTimeout()' ,所以'setTimeout()'會調用它們。然而,他們不知道你想要的變量是什麼,所以他們沒有辦法將它們傳遞給函數。定義函數參數並不會以某種方式導致它們被傳遞給函數。 –
[JSHint](http://jshint.com)會給你一些警告 - 「不要在循環中創建函數」 – elclanrs