質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1974閲覧

window.setTimeout() のコールバック関数の this 値が window オブジェクトに束縛される挙動について

think49

総合スコア18162

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

4グッド

2クリップ

投稿2016/02/16 01:23

編集2016/02/16 01:34

window.setTimeout のコールバック関数の動きを見る為に下記コードを書きました。

JavaScript

1'use strict'; 2function sample () { console.log(this); } 3sample(); // undefined 4setTimeout(sample, 1000); // window

setTimeout(sample, 1000);undefined をコンソール出力すると想定していましたが、期待に反して window オブジェクトを出力しました。
そこで「HTML Living Standard」「HTML 5.1」の仕様書を読む事を試みました。

If the first method argument is a Function
Invoke the Function. Use the third and subsequent method arguments (if any) as the arguments for invoking the Function. Use method context proxy as the callback this value.

上記部分であろうことは想定できるのですが、私の英語読解能力では意味が理解できませんでした。
どなたか日本語で解説頂けないでしょうか。
もしくは window.setTimeout に関する仕様書の日本語訳があれば紹介して頂けないでしょうか。

Lhankor_Mhy, miyabi-sun, ikuwow, maisumakun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

上のWHATWG版の仕様書を読み進めていくと、タイマーの初期化ステップへ、「method context」としてwindow(もしくはWeb Workerのグローバルオブジェクト)を渡す、とあります。

そして、初期化ステップの中では実行すべきタスクを作りますが、4-2にありますように、渡された「method context」をthisとして引数の関数が呼ばれることになります(1でwindowはプロキシオブジェクトに変換されますが、これはあまり気にしなくて大丈夫です)。

投稿2016/02/16 01:36

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2016/02/16 02:14

なるほど。step1の箇所を読めば良かったのですね。 おかげさまで理解できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問