2017-02-15 105 views
1

我的問題是關於這個html代碼(我在Chrome 56中工作)。這個Javascript事件處理函數參數在哪裏定義?

<html> 
 
<body> 
 
<input type='range' min='0' max='5' step='0.1' oninput="console.log(value)"> 
 
</body> 
 
</html>

此代碼按預期工作 - 移動滑塊控制導致一堆被打印到控制檯的值。

顯然value變量是在運行console.log(value)的範圍內定義的。我的主要問題是,這個value變量來自哪裏?另外,還有其他一些像它那樣的變量,「就在那裏?」是否有這些變量的文檔,是否依賴他們在那裏是一個好習慣?

+0

它指的是輸入字段的「value」屬性,同樣「this」會引用html標籤本身並傳遞其所有值,您可以傳遞任何html屬性,包括「event」 - 數據 –

+0

好的,但是爲什麼/如何?它看起來像一個「隱含的'this'」,我不認爲JS有。這種行爲是Javascript的一部分,還是由瀏覽器額外完成的? – gnarledRoot

+0

http://jibbering.com/faq/names/event_handler.html – Bergi

回答

1

所以回調是在輸入字段的上下文中完成的。然後,「value」變量實際上就是輸入的「value」屬性,相當於this.value ...

這給我們帶來了第二個問題:你想看看在這種情況下「this」有什麼其他屬性?在你的處理器試試這個:

oninput="console.log(this)" 

您的開發者控制檯會吐出一個對象,你就可以檢查。

希望這會有所幫助!

+0

什麼讓我寫'console.log(value)'而不是被迫寫'console.log(this.value)'? – gnarledRoot

+0

這就是javascript中的變量範圍。如果你要定義'var value ='nothing';那麼這將成爲你當前的「值」變量。但是由於處理程序中沒有定義局部變量,因此它將上下文視爲「this」。在這種情況下,「this」是輸入字段。你也可以試着用'console.log(window.value)'' – MacPrawn

+0

'來訪問窗口的「value」屬性(除非你自己設置它),這個屬性是不存在的(如C++中那樣)以爲Javascript沒有。我找不到引用解釋JS「爲這個上下文尋找」this「,任何指針?仍然覺得瀏覽器本身正在執行一個額外的步驟(不是純JS的一部分),將'this'屬性複製到處理程序的作用域中 - 但是也找不到這個參數。 – gnarledRoot

相關問題