为什么window.setTimeout在IE9中抛出异常?

时间:2014-11-14 14:39:17

标签: javascript internet-explorer-9 settimeout

这是我的代码:

save: function(){
    window.setTimeout(recipeControlsViewModel.saveWOTimeOut(),500);
},

这是我在IE9中的“Internet选项”中选中“显示有关每个脚本错误的通知”选项时仅在IE9中出现的错误。这不会发生在FireFox,Chrome或IE10& IE11。

SCRIPT87: Invalid argument

有人知道为什么会发生这种情况以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

您只需要在匿名函数中包装该函数调用:

save: function(){
    window.setTimeout(function() { recipeControlsViewModel.saveWOTimeOut() },500);
},

或者,从IE9转发,您可以使用.bind()

save: function(){
    window.setTimeout(recipeControlsViewModel.saveWOTimeOut.bind(recipeControlsViewModel) },500);
},

虽然在这种情况下更多的打字。 .bind()函数返回另一个与您传递的对象“绑定”的函数。这意味着返回的函数将使用参数(“recipeControlsViewModel”)作为this的值调用原始函数(“saveWOTimeOut”属性引用的函数)。