2013-07-17 98 views
-4

任務很簡單,但我的經驗還不足以解決它。我需要在eventListiner中使用外部變量。現在,如果我嘗試使用外部變量,那麼我會得到「未定義」。看來這是通過關閉解決的,但我不能完全理解它是如何工作的。變量對事件監聽器的值

錯誤代碼:

function myfunc(){ 
    title = "Head"; 
    console.log(title);//Head 
    document.getElementById("test").onclick = function(){ 
     console.log(title);//undefined 
    } 

} 

權代碼:

function myfunc(){ 
    title = "Head"; 
    console.log(title);//Head 
    document.getElementById("test").onclick = function(){ 
     //some magic... 
     console.log(title);//Head 
    } 

} 

希望對你有所幫助。謝謝。


不幸的是你的答案沒有幫助。所有這些我都試過了,如果那是那麼簡單,我不會在這裏寫。不過,我已經自己做了:

function myfunc(){ 
      function cls(it){ 
       return function(){ 
        console.log(it); 
       } 
      } 
      title = "head"; 
      document.getElementById("test").addEventListener("click",cls(title), false);//head 
    } 

謝謝你,至少你試圖幫助,併爲弊也謝謝。

+1

除了評論「一些神奇......」這兩個代碼示例是相同的。如果您希望我們對差異發表評論,那麼這是毫無用處的 – musefan

回答

0

不需要魔法。更好地在全球範圍內。

title = "Head"; 
function myfunc(){   
    console.log(title);//Head 
    document.getElementById("test").onclick = function(){ // you can't have like this 
     console.log(title);//Head 
    }  
} 
+0

如果您在myfunc的作用域內聲明瞭'title',那麼它就沒有區別,因爲在兩種情況下它都是在click處理程序的作用域之外定義的。事實上,通過在不使用'var'的情況下定義它,變量已經被添加到全局窗口範圍。 –

+0

@DerekHenderson謝謝。 'document.getElementById(「test」)。onclick = function(){'那麼這個代碼可能是問題? – Praveen

+0

確切地說,問題存在於被描述爲'//一些魔法'的代碼中,並且不知道我們無法幫助的魔法是什麼。 –

0

拉標題出來的myfunc()

var title = "Head"; 
function myfunc() { 
    document.getElement... 
} 
+0

如果你在'myfunc'的作用域內聲明瞭'title',那麼這兩種情況都沒有區別,因爲在兩種情況下它都是在click處理程序的作用域之外定義的。事實上,通過在不使用'var'的情況下定義它,變量已經被添加到全局窗口範圍。 –

+0

@DerekHenderson真實。忽略了它沒有定義的事實。 – MiRaIT