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

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

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

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

Q&A

解決済

4回答

1697閲覧

Settimeout関数などのtimerIdは保存しなかったらどこに保存されているのでしょう?

domidomi

総合スコア34

JavaScript

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

0グッド

0クリップ

投稿2019/06/07 03:13

タイトル通りなのですが、Settimeoutなどの関数で戻り値を取得していればそのIDを使ってcleartimeout出来る事と思います。

javascript

1let timerId = setInterval(func , 1000) 2clearInterval(timerId)

しかし戻り値を取得しなかった場合にあってもまったく止められなくなってしまう事はないと思い、window要素などどこかしらに保存されているのでは?と思いました。

初歩的な質問かもしれませんが分かる方がいらっしゃったらご教示お願いいたします

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

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

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

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

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

guest

回答4

0

どこにも保存されません。

投稿2019/06/07 03:15

Lhankor_Mhy

総合スコア36072

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

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

domidomi

2019/06/10 06:23

回答ありがとうございました
guest

0

しかし戻り値を取得しなかった場合にあってもまったく止められなくなってしまう事はない

基本的には止められません(他の方が挙げているように、でたらめな番号で運良く止まるのを狙うなら話は別ですが)。

投稿2019/06/07 03:58

maisumakun

総合スコア145183

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

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

domidomi

2019/06/10 06:23

回答ありがとうございました
guest

0

ベストアンサー

timerIdは単なるユニークな整数値なので当てずっぽうで止めることはできます。
逆に言えば発行時に受けなければ任意に探すことはできません

sample

javascript

1setTimeout(function(){console.log("x")},100); 2setTimeout(function(){console.log("y")},200); 3setTimeout(function(){console.log("z")},300); 4clearTimeout(3);

※状況によって何が止まるかは不定

投稿2019/06/07 03:17

編集2019/06/07 03:21
yambejp

総合スコア114759

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

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

domidomi

2019/06/10 06:23

回答ありがとうございました
guest

0

変数に返り値を格納しなかった時ということですね・・・。
勘違いしてました・・・。

止められるかどうかは、他の回答者の方の回答や、私の元回答で解決できるかと思うので、
setIntervalがなんぞやってところで、回答修正いたします。

windowオブジェクトに繰り返す関数群が保存されるとかではなく、
Web application APIというもので繰り返しが実行されているため、
windowオブジェクトは、その存在時点でAPIを使用した後にできているオブジェクトなので、
APIである以上、JavaScript側では、API元のコントロールはできない、中身を覗くことはできない、ということかと思います。
(間違っていたらすみません。ご指摘いただいたら、修正します)

公式の日本語訳ではないようですが、以下の記事が非常に参考になるかと思います。
HTML Standard — Web application APIs(日本語訳)

また、MDNの記事も大変参考になると思います。
WindowOrWorkerGlobalScope.setInterval() - Web API | MDN
WindowOrWorkerGlobalScope - Web API | MDN

PHPから提供されたAPIの中身を、JavaScript側から覗くことはできないように、
APIの使用先である、JavaScriptからでは、APIの中身は当然確認することができません。
(意図的に覗けるようにしていれば、覗ける)
よって、windowオブジェクトのどこを探しても、setIntervalないし、setTimeoutで定義した、
繰り返しさせている関数は見つかりません。

語弊があるので追記ですが、
今回の質問のように、funcは、JavaScript定義の変数かと思いますので、
func変数自体は、window内に当然あります。
見つからないというのは、あくまで、タイマーで実行している、仕組みの中での、
関数群、です。
(言い方が難しい)

--------- 以下元回答 --------
Lhankor_Mhyさんのおっしゃる通り、
どこかに保存はされませんが、
変数として格納はされます。
しかし、letの場合、(記述の仕方によってはvarでも)windowではなく、記述ブロックのスコープ変数として格納されます。
(ルートに書けば、windowに格納される)
というか、console.log(timerId)ってやって、中身見たら、正体がわかるかと思いますが。
今回の場合なら、clearInterval(1)でもクリアできます。
ちなみに、window要素と言うと、HTMLの<window>タグ?と勘違いされるので、
windowオブジェクトと言った方がいいかと。

投稿2019/06/07 03:29

編集2019/06/07 05:22
miyabi_takatsuk

総合スコア9528

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

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

domidomi

2019/06/10 06:23

回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問