亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

測試三中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之間的關系是怎樣的,它們是獨立的嗎,如果缺少一個,另一個會正常運行嗎?

正在回答

6 回答

課程對這個回調函數的問題講解得不是很清楚。

先看click函數(mousedown函數同理),語法規則為?jQueryObject.click( [ [ data ,] ?handler ] )。可以看到里面的參數是可選的(中括號的意思是可以有這個參數,也可以沒有這個參數),所以我們可以看到

  1. $("button").click(handler),

  2. $("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參數傳遞,回調幾個概念放在了一起,而且函數名還有點讓人容易混淆,把這些概念拆開單獨一個一個地理解就容易些。


28 回復 有任何疑惑可以回復我~
#1

慕粉4340077

請問課程中: function data(e) { alert(e.data) //1111 } function a() { $("button:eq(2)").mousedown(1111, data) } a(); mousedown(1111,data)中data是不是指前一個函數data()?這樣寫是為了調用前一個函數?
2016-12-26 回復 有任何疑惑可以回復我~
#2

UltraNeo 回復 慕粉4340077

對,就是這樣。
2016-12-26 回復 有任何疑惑可以回復我~
#3

lx200800

感謝您
2017-03-09 回復 有任何疑惑可以回復我~

非常感謝

0 回復 有任何疑惑可以回復我~

看了這里,表示理解了

0 回復 有任何疑惑可以回復我~

感謝了,這老師不嚴謹?。〔贿^很不錯了!

0 回復 有任何疑惑可以回復我~

終于理解了,回答很到位,不然我老是糾結兩個data是什么意思了

0 回復 有任何疑惑可以回復我~

1111是作為參數傳過去的,這兩個函數不是獨立的,缺少一個都運行不了。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

測試三中mousedown(1111, data)中1111是參數,而date是函數,不知道我這樣的理解對不對

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號