通過在方法中使用關鍵字「var」,您可以在方法本身的名稱空間中創建此變量。
這就是爲什麼在你的「beginTimer」方法中,你的變量已經在方法塊的末尾被刪除了。因此,使代碼正常工作的最簡單方法是從方法中的變量聲明中刪除「var」。
如果您在完成它們之前調用多個方法,可能會發生新錯誤,因爲它們都將使用相同的「開始」和「結束」。你可能想考慮在「functionName」和「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。
謝謝@jvecsei!我知道這已經超出了這個問題的範圍,但是可能會將提供的函數名和本地變量存儲在全局字典工作中(以抵消您提到的問題)? – KingPolygon
我更新了我的答案,我希望這有助於。當你確定這個問題不會發生時,你不需要UID。 – jvecsei
很高興我能幫到你。 – jvecsei