測試三中mousedown(1111, data)中1111是參數(shù),而date是函數(shù),不知道我這樣的理解對不對
<h4>測試三</h4>
? ? <div class="test3">
? ? ? ? <p>$('.right').mousedown(1111, set)</p>
? ? </div>
? ? <button>不同函數(shù)傳遞數(shù)據(jù)</button>
? ? <script type="text/javascript">
? ? //不同函數(shù)傳遞數(shù)據(jù)
? ? function data(e) {
? ? ? ? alert(e.data) //1111
? ? }
? ? function a() {
? ? ? ? $("button:eq(2)").mousedown(1111, data)
? ? }
? ? a();
? ? </script>
1111這個參數(shù)是通過?function data(e)中的e傳過去的,是嗎?兩個function之間的關(guān)系是怎樣的,它們是獨立的嗎,如果缺少一個,另一個會正常運行嗎?
2016-12-04
課程對這個回調(diào)函數(shù)的問題講解得不是很清楚。
先看click函數(shù)(mousedown函數(shù)同理),語法規(guī)則為?jQueryObject.click( [ [ data ,] ?handler ] )。可以看到里面的參數(shù)是可選的(中括號的意思是可以有這個參數(shù),也可以沒有這個參數(shù)),所以我們可以看到
$("button").click(handler),
$("button").click(someData, handler)
兩種不同的寫法。
這個課程之前的系列里面,出現(xiàn)的主要是以上第一種情況,例如
$("button").click(function( ) {
????alert("點擊后就出來這一句話");?
});?
這個比較好理解,通過綁定點擊事件處理函數(shù),點擊后就觸發(fā)該function(一個匿名函數(shù))。
如果我們不想把代碼直接寫在click( )的這個括號里面,就可以另外聲明一個函數(shù),再把函數(shù)名給傳遞進去,替代原來function( ) {blablabla} 這一串代碼的位置。這里吐槽一下老師的函數(shù)命名,起data這個名字很容易和e.data中的data搞混,實際上兩個data無關(guān),函數(shù)名隨便起什么都可以。
例如我們聲明一個函數(shù)?
function alertSomething() {
????alert("現(xiàn)在你可以看到我了!");
}
然后我們再把這個函數(shù)名作為參數(shù)傳遞到之前那個click函數(shù)中,像這樣:
$("button").click( alertSomething );
就完成了和之前相同的功能,但這樣就把具體實現(xiàn)的代碼單獨寫成了一個函數(shù),比較靈活。
同時,這個alertSomething函數(shù)還可以有一個參數(shù),老師的例子起的參數(shù)名是e,這個也沒什么特殊的,指代的應(yīng)該是event這個單詞,估計是習慣。那再看之前出現(xiàn)過的這個函數(shù):
$('p').click(function(e) {
????alert(e.target.textContent)
})
意思就是輸出“該事件(的). 目標(的). 文本內(nèi)容”。這里事件是某p標簽被點擊了,因此回調(diào)函數(shù)的參數(shù)e就傳遞了這個事件,如果頁面上有大量p標簽的話,用這樣一個參數(shù)e就把被點擊的那個p給拎了出來,e.target指的就是這個p。
最后再來說這個data部分。剛才說的click()函數(shù)的第二種寫法,就是帶有兩個參數(shù)的,一個是someData,一個是回調(diào)函數(shù)handler,這個someData可以被當作參數(shù)傳遞到事件e的data屬性里。這個是自動傳遞進去的,就像參數(shù)e指代當前點擊事件,并不由用戶設(shè)置,而是自動賦值一樣。
function handleData(e) {
????alert(e.data) //12345
}
function a() {
???? $("button:eq(2)").click(12345, handleData)
}
a( );
我稍微把函數(shù)名改了一下,看得更清楚一些,這個12345直接被賦值給了e的data屬性,通過alert函數(shù)可以證明這一點。事實上我們可以傳遞更復(fù)雜的結(jié)構(gòu),例如將參數(shù)12345改成某個字典型變量,那么e.data.key就可以訪問字典型變量的某個value了。
老師的這個例子有點難懂,主要原因就在于一次把可選參數(shù),函數(shù)指針傳遞,data參數(shù)傳遞,回調(diào)幾個概念放在了一起,而且函數(shù)名還有點讓人容易混淆,把這些概念拆開單獨一個一個地理解就容易些。
2017-12-13
非常感謝
2017-11-10
看了這里,表示理解了
2017-06-21
感謝了,這老師不嚴謹??!不過很不錯了!
2017-02-27
終于理解了,回答很到位,不然我老是糾結(jié)兩個data是什么意思了
2016-12-04
1111是作為參數(shù)傳過去的,這兩個函數(shù)不是獨立的,缺少一個都運行不了。