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

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

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

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

Q&A

解決済

2回答

481閲覧

関数外の宣言を、関数内で使えない理由

nikuatsu

総合スコア177

JavaScript

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

0グッド

0クリップ

投稿2023/03/19 13:41

質問

JavaScriptのスコープがよく分からないのですが、以下resultはなぜ+1がされないのでしょうか?

JavaScript

1let result = 0; 2function hoge(){ 3 result + 1; 4} 5hoge(); 6console.log(result); // なぜ +1 がされず 0 のままなのか?

私の理解はこうなのですが、どこが誤っているのでしょうか?

① まずhoge()内のresultは、constletがない
② だからhoge()外のresultを、引き継いで処理してくれる
③ よってhoge()後のresultは、hoge()内の処理結果が反映されているハズ

試したこと

ちなみに以下を試したら1になりました。
ということは、上記②は少なくとも正しく、hoge()外のresultを引き継いでいるということですよね?(引き継いでいなければ、以下のresult + 1はすなわちundefined + 1なのでエラーになるはず)

JavaScript

1let result = 0; 2function hoge(){ 3 return result + 1; 4} 5console.log(hoge());

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

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

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

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

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

guest

回答2

0

ベストアンサー

関数内外関係なく、単に

let x = 0 x + 1

xの値が何も変わらないのと同じです。

投稿2023/03/19 13:45

ozwk

総合スコア13544

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

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

nikuatsu

2023/03/19 16:06

ありがとうございます。なるほど、result = result + 1; にすべきだったのですね。
guest

0

もう解決されていますが、もう少し掘り下げますと、
+一個の式で変数値が変わると、いろいろとプログラミング上で不都合や、不便さが生じてしまうからです。
例えば、以下の構文があったとしましょう。

javascript

1let result = 5; 2 3for ( let i = 0; i < result + 1; i++ ) { 4 if (i == result + 1) { 5 console.log('i: ', i); 6 console.log('result: ', result); 7 } 8}

これは、iが、result + 1になるまでループさせる、といった構文の想定ですが、
もし、result + 1を実行した時、元の変数値が変わってしまうと、
無限ループとなってしまいます。

変数値を足したい時は、++と、二個つけます。

javascript

1result++;

つまり、条件式で、元の変数を変えずに、計算した上での数値と比較したい、などの構文を作りたいことが、頻繁に発生する、ということです。

上記の理由などから、プログラミングでは、
+一個と二個では、挙動が分かれています。
(他にも演算子によって色々な計算方法があります)

投稿2023/03/20 00:58

編集2023/03/20 01:00
miyabi_takatsuk

総合スコア9555

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問