2017-12-27 126 views
4

使用節點的MySQL我有以下代碼:爲什麼此回調沒有訪問外部範圍的正確值?

for (var i = 0; i < 10; i++) { 
    connection.query('select 1', function(err, rows) { 
     console.log('#' + i); 
    }); 
} 

我預期的結果是#0,#1,...,#9,但實際的結果是#10印刷10次。很顯然它在回調執行的時刻打印i的值,而不是創建回調。我怎樣才能實現我想要的結果?

+0

'爲(VAR I = 0; I <10; ++ⅰ)(功能(I){connection.query ('select 1',function(err,rows){console.log('#'+ i)})})(i);' –

回答

5

申報我讓:

VAR I =>令i

for (let i = 0; i < 10; i++) { 
+1

你能解釋爲什麼這會產生變化嗎? – jordanm

+1

區別在於範圍界定。 var的範圍是最接近的功能塊,let的範圍是最近的封閉塊,它可以小於功能塊。如果在任何區塊外,兩者都是全球性 https://stackoverflow.com/questions/762011/whats-the-difference-between-using-let-and-var-to-declare-a-variable –

+2

這實際上沒有幫助;你仍然只有一個變量。 – SLaks

相關問題