如何知道jQuery回调函数中有哪些参数可用,如何理解它并添加参数
How to know what parameters are available in jQuery callback functions, how to understand it and add parameters?
我目前正在使用Openlayers 3库开发一个映射,需要了解回调函数。
然后我开始阅读,发现我一直在jQuery中使用回调函数。我还读到,你可以使用这些功能中可用的参数:
$('body').click(function(e){
e.preventdefault();
)}
"e"可以在函数中使用。
我的问题是:
- 如何知道哪些参数可用
- 你能给这个函数添加参数吗
- 这些参数在哪里定义
我试图理解这一点,因为否则我将不得不使用全局参数,而使用全局参数被认为是"糟糕的做法",对吧?
编辑:
因此,如果我想在上面的函数中添加一个额外的参数,这会起作用吗:
document.ready(function(){
var data = 6;
$('body').click(function(e, data){
e.preventdefault();
console.log(data);
})
})
回调函数的参数记录在您使用的特定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将被记录到控制台中。为什么?您不是将一个简单的函数传递给点击处理程序,而是声明一个函数并立即执行它,如下所示:
(function(){
})()
从这个IIFE(立即调用的函数表达式),您将返回另一个函数,该函数将用作单击事件的处理程序。传递给IIFE的变量将被捕获,并将保持与附加点击处理程序时相同的值
相关文章:
- 理解日期对象接收参数时的getDay()方法
- 无法通过将参数传递给 Javascript 函数来理解行为
- 试图理解一个在JS中有两个参数输入的函数(如函数X(param1)(param2))
- 如何理解具有多个参数的函数组合
- 不理解此函数调用中的参数
- 理解 $.ajax() 参数以获取 PHP 变量时遇到麻烦
- $scope函数参数从何而来
- 如何知道jQuery回调函数中有哪些参数可用,如何理解它并添加参数
- 试图理解Javascript中参数数组的概念
- 理解Backbone.sync方法中的[options]参数
- 试图理解JS中的参数
- 理解javascript的hasOwnProperty()方法是如何计算参数的
- JavaScript新手,难以理解传递参数
- 更好地理解JavaScript参数
- 理解递归函数的解构参数
- 理解SVG查询字符串参数
- 这个绑定函数…这些参数,还有这个apply方法.我不确定我理解这在这个例子中是如何工作的
- 传递给高阶函数的函数中的参数从何而来
- nodejs回调don'我不理解回调结果是如何通过参数得出的
- 无法理解筛选器[VueJS]中的参数