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