为了账号安全,请及时绑定邮箱和手机立即绑定

测试三中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下载
官方微信