我遇到了一个非常有趣但又令人困惑的代码片段,并且很难理解它究竟是什么让它回归。
// Create a data point generator.
var getDataPoint = (function() {
var _x = -1;
var _max = _data.length;
return function() {
_x = (_x + 1) % _max;
return {
x: Date.now(),
y: _data[_x]
};
};
})();
var heartRate = 60; // bpm
var interval = 60 * 1000 / (_data.length * heartRate);
// Generate a new data point based on the heart rate.
setInterval(function() {
$('.jke-ecgChart').ecgChart('addDataPoint', getDataPoint());
}, interval);
现在我对闭包及其工作方式有了非常基本的了解,例如,它们是外部函数的范围。
但更令我困惑的是这条特定的路线:
$('.jke-ecgChart').ecgChart('addDataPoint', getDataPoint());
getDataPoint()
将返回什么?函数或{x,y}?
如果我想返回{x,y}而不是函数怎么办?
由于
答案 0 :(得分:2)
此处getDataPoint
被解析为第一行中immediately invoked function
返回的值。因此getDataPoint存储对line 4
返回的函数的引用。因此,当你在$('.jke-ecgChart').ecgChart('addDataPoint', getDataPoint())
调用它时,将调用第4行的函数,它将返回{x,y},而不是函数。您可以在下面的代码中看到类似的示例,我在其中使用了一些常量,只是为了能够记录输出。
// Create a data point generator.
var getDataPoint = (function() {
var _x = -1;
var _max = 6;
return function() {
_x = (_x + 1) % _max;
return {
x: Date.now(),
y: _x
};
};
})();
var heartRate = 60; // bpm
var interval = 1000;
// Generate a new data point based on the heart rate.
setInterval(function() {
console.log(getDataPoint());
}, interval);