window.setTimeoutのwindowってなんですか?

windowはブラウザのJavaScriptではグローバルオブジェクトと呼ばれるもので、いちばん外側のスコープになります。

そして、JavaScriptには、変数の定義を、現在のスコープから探し、なければ外のスコープに探しに行くしくみがあります(スコープチェーン)。

内側のスコープにsetTimeoutが定義されていなければ、外へ外へと辿って行って、最終的にwindow.setTimeoutにたどり着きます。

外へ外へと探しに行く途中のスコープにsetTimeoutが定義されていると、それが呼ばれます。

ほかのオブジェクトで絶対setTimeoutなんて定義していない状況であれば、省略しても問題ありません。

複雑なプログラムで途中のスコープでsetTimeoutが定義されている可能性がある場合や、明示的にグローバル関数のalertを呼びたいことを示したい場合は、window.setTimeoutと書くとよいでしょう。

Program

簡単のためにwindow.alertで書きます。

windowを省略しないで書く。

window.alert('Hello'); // → Hello

windowを省略して書く。

alert('Hello'); // → Hello

windowを省略したとき、内側のスコープに同じ名前の関数が定義されていた場合と、その状況でもwindowを省略しないで書いた場合。

// 外のスコープ
(function(){
    // 1つ内側のスコープ
    function alert() {
        window.alert('内側のスコープのalertが呼ばれました');
    }
    alert('Hello'); // 内側のスコープにあるalertが呼ばれる → '内側のスコープのalertが呼ばれました'
    window.alert('Hello'); // windowのalertが呼ばれる → Hello
})();

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です