「window.location.reload」をsetTimeoutの引数として渡すことができないのはなぜですか? 質問する

「window.location.reload」をsetTimeoutの引数として渡すことができないのはなぜですか? 質問する

Safari と Chrome で次のコード行が表示されるエラーについて、詳しく教えていただきたいです。

setTimeout(window.location.reload, 250);

Chrome のレポート:
Uncaught TypeError: Illegal invocation

そしてSafari:
TypeError: Type error

Firefox では、コードは問題なく動作します。また、このコードは次の 3 つのブラウザのいずれでも問題なく動作します。

setTimeout((function() {
  window.location.reload();
}), 250);

Chrome と Safari ではこのコードに問題はありません:

var say_hello = function () { alert("hello") };  
setTimeout(say_hello, 250);  

window.location.reloadこのエラーの原因となる特別な点は何ですか?

(役に立つかどうかは分かりませんが、ここにjsfiddleこれを例証する)

ベストアンサー1

なぜなら、として がreload()必要です。言い換えると、それは の方法です。次のように言うと:window.locationthiswindow.location

var fun = window.location.reload;

fun();

reload()参照なしでthis(または暗黙的なwindow参照で)関数を呼び出しています。

これは動作するはずです:

setTimeout(window.location.reload.bind(window.location), 250);

部分window.location.reload.bind(window.location)は、関数を受け取り、呼び出されたときに内部で参照としてwindow.location.reload使用する関数を返すことを意味します。window.locationthisreload()

参照

おすすめ記事