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