如何知道jQuery回调函数中可用的参数,如何理解它并添加参数?

时间:2016-01-12 22:26:18

标签: javascript jquery html

我目前正在使用Openlayers 3库开发一个地图,需要了解回调函数。

然后我开始阅读并发现我一直在使用jQuery的回调函数。 我还读到你可以使用这些函数中可用的参数:

$('body').click(function(e){
    e.preventdefault();
)}

''可以在函数中使用。

我的问题是:

  1. 如何知道哪些参数可用?
  2. 您可以为此功能添加参数吗?
  3. 这些参数定义在哪里?
  4. 我正在努力理解这一点,因为否则我将不得不使用全局参数,并且使用全局参数被认为是不良做法',对吗?

    编辑:

    因此,如果我想在上面的函数中添加一个额外的参数,那么这是否可行:

    document.ready(function(){
        var data = 6;
        $('body').click(function(e, data){
            e.preventdefault();
            console.log(data);
        })
     })
    

1 个答案:

答案 0 :(得分:1)

回调函数的参数记录在您正在使用的特定API中。

例如,可以在此处找到jQuery中click - 方法的引用:https://api.jquery.com/click/

如果要向函数添加参数,可以使用函数外部的变量,它们将在该函数内部可用:

document.ready(function(){
    var data = 6;
    $('body').click(function(e){ // Note: don't add 'data' in the parameter here, it will overwrite your local variable with whatever jquery passes to the function.
        e.preventdefault();
        console.log(data); // data = 6, it's available from the outer function
    })
 })

由于在附加处理程序时不会执行回调(有时当您调用$("body").click()时,您需要确保执行时可用的变量具有与附加句柄时相同的值。

说你有以下声明:

 var data = 6;
 $('body').click(function(e){
     e.preventDefault();
     console.log(data);
 });
 data = 10;

在上述情况下,console.log(data)语句将输出10.为什么?因为到用户点击时,最后一个语句已经执行,并且已经修改data以保持值10。

要解决此问题,您需要在闭包内捕获变量:

    var data = 6;
    $('body').click((function(myVar){
        return function(e){
            e.preventDefault();
            console.log(myVar);
        }
    })(data));
    data = 10;

此处,值6将记录到控制台。为什么?你没有将普通函数传递给click-handler,而是声明一个函数并立即执行它:

(function(){
})()

从这个IIFE(立即调用的函数表达式)中,返回另一个将用作click事件处理程序的函数。您将传输传递给IIFE的变量,并保持与附加点击处理程序时相同的值