模块中的返回值返回Null

Return Value in Module Returns Null?

本文关键字:返回 Null 返回值 模块      更新时间:2023-09-26

我正试图创建一个模块,在那里我可以实现定时器(解析云代码)。问题是它在最后的执行时间返回了一个空值。我认为这与无法检索初始起始变量有关。

我怎样才能做到这一点。谢谢

var start;
var end;
exports.beginTimer = function beginTimer(functionName) {
    //Start timing now
    var start = new Date().getTime();
}
exports.endTimer = function endTimer(functionName) {
    //End timer
    var end = new Date().getTime();
    var time = end - start;
    alert('Execution time for' + functionName + ': ' + time);
}

您已经在每个函数中重新声明了startend

这将用同名的局部变量屏蔽全局变量。

CCD_ 3得到CCD_ 4作为CCD_。

除非您想创建一个本地作用域的变量,否则不要使用var

通过在方法中使用关键字"var",可以在方法本身的命名空间中创建此变量。

这就是为什么在"beginTimer"方法中,您的变量已经在方法块的末尾被删除了。因此,使代码工作的最简单方法是从方法中的变量声明中删除"var"。

如果在完成多个方法之前调用它们,这可能会发生新的错误,因为它们都将使用相同的"开始"answers"结束"。您可能需要考虑在"functionName"answers"start"之间使用某种映射。

你可以这样做,例如:

var start = {};
exports.beginTimer = function beginTimer(functionName) {
    //Start timing now
    start[functionName] = new Date().getTime();
}
exports.endTimer = function endTimer(functionName) {
    //End timer
    var end = new Date().getTime();
    var time = end - start[functionName];
    alert('Execution time for' + functionName + ': ' + time);
}

由于当一个方法在完成之前被调用两次时,可能会出现新的问题,因此您可能需要使用传递给该方法的唯一标识符。

var start = {};
exports.beginTimer = function beginTimer(functionName, uid) {
    //Start timing now
    start[uid] = new Date().getTime();
}
exports.endTimer = function endTimer(functionName, uid) {
    //End timer
    var end = new Date().getTime();
    var time = end - start[uid];
    alert('Execution time for' + functionName + ': ' + time);
}

您必须在方法中生成此UID。