Javascript setTimeout

use*_*097 1 javascript

你能告诉我为什么这样有效:

PageMethods.UpdateForcedDisposition(forcedDisposition, a.value, SucceededCallback, FailedCallback);
Run Code Online (Sandbox Code Playgroud)

什么时候不这样?

setTimeout("PageMethods.UpdateForcedDisposition(" + forcedDisposition + "," + a.value + ", SucceededCallback, FailedCallback);", 1000);
Run Code Online (Sandbox Code Playgroud)

有趣的是,类似的调用适用于setTimeout:

setTimeout("PageMethods.UpdateSales(" + id + ", " + a.value + ", SucceededCallback, FailedCallback);", 1000);
Run Code Online (Sandbox Code Playgroud)

......我很难过!

And*_*y E 6

避免传递字符串setTimeout.尽可能使用匿名函数:

window.setTimeout(function () {
    PageMethods.UpdateForcedDisposition(
        forcedDisposition, 
        a.value, 
        SucceededCallback, 
        FailedCallback
    );
}, 1000);
Run Code Online (Sandbox Code Playgroud)

setTimeout带有字符串的A 在全局范围内执行.如果您尝试从当前范围引用变量,则会遇到错误.