我很难理解如何调用此回调:
$(function () {
function getData(callback) {
var now = Date.now();
var hour = 60 * 60 * 1000;
var temperatures = [];
for (var k = 24; k > 0; --k) {
temperatures.push([now - k * hour,
Math.random() * 2 + 10 * Math.pow((k - 12) / 12, 2)
]);
}
callback ({data: temperatures });
}
getData(function (data) {
$.plot("#chart", new Array(data));
});
});
我很清楚循环中发生的事情只需要回调澄清。那么,回调只是另一个函数,在其中我们正在创建一个方法?并为其分配一个tempretures数组?这部分让我很困惑。如果回调中的“数据”是一种方法,为什么我不能将其重命名为其他任何东西?虽然我可以在调用getData函数时重命名为“data”参数。
有人可以提供这个回调和tempretures数组关系的更容易理解的版本吗?感谢。
答案 0 :(得分:3)
您正在创建一个对象,该对象具有一个名为data
的属性,其值为数组(您的温度)。该对象作为回调的第一个参数传递。
getData(function (data) {
$.plot("#chart", new Array(data));
});
此处对象作为名为data
的参数传入。如上所述,我认为这不会起作用,因为您需要做的是将数组传递给new Array()
而不是对象。所以这样做:
getData(function (data) {
$.plot("#chart", new Array(data.data));
});
如果重命名对象属性,则更容易理解:
callback ({temperatures: temperatures});
getData(function (data) {
$.plot("#chart", new Array(data.temperatures));
});
答案 1 :(得分:0)
回调是一种说法,“当你完成了你正在做的事情时,请调用此方法。”
JavaScript是单线程的,但它是异步的,因此您可能会在其他人之前完成一些调用。在这些情况下,您的代码无序运行。回调是一种方法,可以确保方法在完成时调用另一个方法,并按预期完成操作。
对于你的代码,我会在经过时对其进行注释:
$(function () {
function getData(callback) { //callback is a parameter, in our case a function to be called later
var now = Date.now();
var hour = 60 * 60 * 1000;
var temperatures = [];
for (var k = 24; k > 0; --k) {
temperatures.push([now - k * hour,
Math.random() * 2 + 10 * Math.pow((k - 12) / 12, 2)
]);
}
callback ({data: temperatures }); //once you've calculated temperature, call the callback method with an object that has a property called 'data' and a value that is an array.
}
getData(function (data) {
$.plot("#chart", new Array(data));
});
});
答案 2 :(得分:0)
所以,回调只是另一个函数,我们正在创建它 一个方法?并为其分配一个tempretures数组?
有点,回调是一个函数,但你没有创建一个方法。你正在调用一个方法并将数组分配给它。
这部分让我很困惑。如果回调中的“数据”是一种方法 为什么我不能将它重命名为其他任何东西?
错误......“数据”不是方法,它是单个元素对象数组。只要您在回调方法中更改名称,就可以将其命名为任何名称...例如:
getData(function (newData) {
$.plot("#chart", new Array(newData));
});
虽然我可以重命名为任何我想要的“数据”参数 调用getData函数。
你关心调用getData
因为for循环在那个函数中。您将callback
方法作为该函数中的参数传递,以便在计算数据后对其进行处理。