为什么 window.setTimeout 在 IE9 中引发异常

Why window.setTimeout throws an exception in IE9?

本文关键字:异常 IE9 window setTimeout 为什么      更新时间:2023-09-26

这是我的代码:

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

这是我仅在IE9的IE9的Internet选项中选中"显示有关每个脚本错误的通知"选项时收到的错误。这在FireFox,Chrome或IE10和IE11中不会发生。

SCRIPT87: Invalid argument

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

你只需要将该函数调用包装在一个匿名函数中:

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

或者,从IE9开始,您可以使用.bind()

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

尽管在这种情况下,这更多的是打字。.bind()函数返回另一个"绑定"到您传递给它的对象的函数。这意味着返回的函数将调用原始函数(由"saveWOTimeOut"属性引用的函数),参数("recipeControlsViewModel")作为this的值。