您无法访问回调中的主要函数变量的原因是,执行的代码在与调用它的函数不同的执行上下文setTimeout()
中运行。简单来说,在回调中是不一样的。this
如果您不想使用提供函数将回调绑定到上下文的 Javascript 库(请参阅jQuery.proxy和underscore.bind),则必须编写自己的非本机setTimeout
函数来解决此问题。
这是web api 文档中提出的解决方案(请参阅第 1 节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);