updateSession()
にアクセスすると、$sessionTimeLeft
は未定義です。しかし、initiate()
の中で$sessionTimeLeft
の宣言と代入を移動したとき、正しいjQueryオブジェクトが得られました。閉鎖のためinitiate()
の中に宣言された場合は$sessionTimeLeft
にアクセスできると思います。しかし、$sessionTimeLeft
が元のコードの範囲外にあるのはなぜですか?モジュール内のJavaScriptスコープの問題
var session = (function SessionManager() {
var timeLeftInMs;
var timeLeftInMin;
var delay; // in ms
var $sessionTimeLeft = $('#dcSessionTimeLeft');
/* Set up the module by setting the timeout and delay time. */
function initiate(_timeout, _delay) {
timeLeftInMin = _timeout;
timeLeftInMs = timeLeftInMin * 60 * 1000;
delay = _delay; // delay in ms
setInterval(updateSession, delay);
}
function updateSession() {
timeLeftInMs -= delay;
timeLeftInMin = timeLeftInMs/60000; // convert ms to min.
$sessionTimeLeft.text(timeLeftInMin);
}
var publicAPI = {
initiate: initiate
};
return publicAPI;
})();
session.initiate(30,1000);
'session.initiate(30、1000)' –
は '#dcSessionTimeLeft'あなたは' $ sessionTimeLeft 'にそれを割り当てるときにロードされていますか? –
問題を再現するためのコードを入力してください。 –