コールバックでメイン関数変数にアクセスできない理由は、によって実行されるコードが、それが呼び出された関数とはsetTimeout()
別の実行コンテキストで実行されるためです。簡単に言えば、this
コールバックでは同じではありません。
コールバックをコンテキストにバインドする関数を提供する Javascript ライブラリを使用したくない場合 ( jQuery.proxyおよびunderscore.bindを参照)、これを修正するために独自の非ネイティブsetTimeout
関数を作成する必要があります。
Web API ドキュメントで提案されているソリューションは次のとおりです(セクションを参照The "this" problem
)。
window.setTimeout = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
var oThis = this, aArgs = Array.prototype.slice.call(arguments, 2);
return __nativeST__(vCallback instanceof Function ? function () {
vCallback.apply(oThis, aArgs);
} : vCallback, nDelay);
};
そこまで行きたくない場合は、コードを改善して、引数を のパラメータとしてコールバックに渡しますsetTimeout
。
var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
詳細については、 JavaScript Web APIを確認してください。
したがって、あなたの例では、次のように書くことができます:
setTimeout(function (x) {
debugger;
}, 100, newValue);