🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

2回答

999閲覧

let(など)で変数に代入する値の処理がわからない

snow333

総合スコア13

JavaScript

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

0グッド

1クリップ

投稿2019/10/07 11:59

編集2019/10/07 12:00
値自体は代入されるときに処理も同時にされているのでしょうか? 例のコードでは、 1. 変数idを定義 2. idにsetTimeout(abc, 1000) を代入 3. setTimeout(abc, 1000)を実行 という処理がされる認識で合っているでしょうか?

JavaScript

1let id = setTimeout(abc, 1000);

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

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

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

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

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

guest

回答2

0

  1. 変数idを定義
  2. setTimeout(abc, 1000)を実行
  3. idにその結果 を代入

こういう順番です

投稿2019/10/07 12:10

y_waiwai

総合スコア88038

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

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

Zuishin

2019/10/07 12:25 編集

定義って何ですか? 英語では define で、未定義を undefined と言いますが。
guest

0

ベストアンサー

setTimeout(abc, 1000) をまず実行し、その戻り値を id に入れています。

JavaScript

1let result = 1; 2 3const func = x => { 4 console.log(result); 5 return x * 2; 6}; 7 8result = func(2); 9console.log(result);

このコードでは func の実行中と実行後に result の値を出力しています。
それぞれ 1 と 4 が出力されます。

追記

WindowOrWorkerGlobalScope.setTimeout()

setTimeOut の場合、まず setTimeOut が実行され、その ID が id に入り、指定時間後に登録された関数が実行されます。どこが違いますか?

追記 - この回答で定義の順序について触れていない理由

一般に、変数の種類や型をコンパイラ・インタプリタに示すことを「宣言」と言い、変数の領域を確保するよう指令を出すこと、もしくは初期化することを「定義」と呼びます。

let id = setTimeout(abc, 1000); の場合、定義はいつになるでしょうか?
戻り値が何であるかがあらかじめわかっているなら、戻り値が返る前にメモリを確保することができます。しかし、戻り値が何であるかわからない場合、返ってきた戻り値を見てからメモリを確保することになります。

https://jsprimer.net/basic/variables/#let

次のコードでは、bookTitleという変数を宣言し、初期値を"JavaScriptの本"という文字列であることを定義しています。

引用先でこのように書かれている通り、「宣言」と「定義」には意味合いの違いがあります。

「定義」が行われるのは「ソースコードを書いた時点」とも考えられます。その場合、定義は何よりも早く行われたと言えます。

しかし、動的言語で戻り値が確定してからメモリが確保されたということであれば、定義は「戻り値が確定してから」つまり一番最後で、それまでは未定義ということも考えられます。JavaScript の場合は初期化しない変数が参照された時は undefined つまり未定義を表す値になります。

つまり「定義」がいつ行われたかを論じるには、その前に解決しておかなければならない課題があり、一概に言えることではありません。定義の順序については扱わないのが筋だと思います。

投稿2019/10/07 12:10

編集2019/10/08 06:38
Zuishin

総合スコア28669

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

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

Zuishin

2019/10/08 05:07

低評価の意味が分からない。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問