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

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

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

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

Q&A

解決済

3回答

1024閲覧

javascriptの変数宣言

gongon10600

総合スコア8

JavaScript

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

0グッド

0クリップ

投稿2020/06/19 10:05

編集2020/06/19 10:31

プログラミング初心者です。
javascriptの変数宣言に関して下記、2点質問させていただきます。

#変数宣言ごとの特徴に関して
javascript では、下記の宣言がありそれぞれ次のような特徴があると認識しております。
間違いがありませんでしょうか。

宣言子varletconst
再宣言可能不可不可
再代入可能可能不可
スコープ関数ブロックブロック

#スコープに関して
下記のように、関数の中で関数を呼び出す際、
親になっている関数で定義した定数(MoringWord, AfternoonWord)は、
関数getWordでは、定義されてないことになると思うのですが、どうすればよいでしょうか。

javascript:タイトル

1function Greeting(){ 2 var MoringWord= "Good Morning"; 3 var AfternoonWord= "Good Afternoon"; 4 let Word= getWord("10時"); 5}; 6 7function getWord(time){ 8 switch (time){ 9 case "10時": 10 return MoringWord; //変数宣言できていない 11 break; 12 case "16時": 13 return AfternoonWord; //変数宣言できていない 14 break; 15 } 16}; 17

下記のようにすれば、実現は可能かと考えているのですが、他に方法等ありますでしょうか。
・MoringWord, AfternoonWordをGreetingの外に出す。(グローバル変数にする)
・MoringWord, AfternoonWordを関数getWordの引数に持つ。

また、この関数の中関数を呼び出す方法がそもそもおかしいのであれば、ご指摘いただけますと幸いです。

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

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

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

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

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

guest

回答3

0

変数宣言ごとの特徴に関して

varはグローバルスコープor関数スコープですね。
他、付け足すべきは、

  • グローバルコードで実行すると、varはグローバル変数を定義し、let,constはローカル変数を定義する
  • varはhoisting、let,constはTDZ

スコープに関して

そのケースなら、class化して、共有する変数はインスタンスプロパティにする事をお勧めします。

Re: gongon10600 さん

投稿2020/06/19 10:24

think49

総合スコア18156

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

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

gongon10600

2020/06/19 11:01

ご回答ありがとうございます。参考に、勉強させていただきます。
guest

0

ベストアンサー

間違いがありませんでしょうか。

大間違いがあります。
関数ではありません。
キーワードと言います。
それと、頭大文字だと別の話になるので、
そこは正確に記述しないとダメです。

下記のようにすれば、実現は可能かと考えているのですが、他に方法等ありますでしょうか。

他にもカプセル化したりとか、
関数から値返すようにしたりとか、
クラス(プロトタイプ)で定義したりとかいろいろありますが、
とりあえず、質問の内容であれば、
その方法で十分かと思います。

投稿2020/06/19 10:17

編集2020/06/20 11:40
miyabi_takatsuk

総合スコア9528

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

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

gongon10600

2020/06/19 10:29

ご回答ありがとうございます。 宣言子についてご指摘ありがとうございました。 基本的なことも割っていないので助かります。 質問内容の実現方法に関して、 グローバル変数や引数にはしたくないと考えていたのですが、 どのように対応するのが良いでしょうか。 また、下記三点に関しては後程勉強させていただきます。 「関数から値返す」に関してはどのように検索すればよいでしょうか。 (名前などついていますでしょうか。) ・カプセル化 ・関数から値返す ・クラス(プロトタイプ)
miyabi_takatsuk

2020/06/19 10:35 編集

> グローバル変数や引数にはしたくない であれば、私の回答もそうですが、think49さんの回答も参考にされるといいかと。 (その部分に関しては言ってることはほぼ同じです。) javascript 関数 値を返す とかでいろいろでてくると思いますよ。
gongon10600

2020/06/19 11:00

お返事ありがとうございます。承知いたしました。
think49

2020/06/20 07:08

@miyabi_takatsuk さん > 宣言子、キーワードと言います。 ES2019に "Keywords" はありますが、 http://www.ecma-international.org/ecma-262/10.0/#sec-keywords "declarator" はありません(ページ検索で未HIT)。 --- 表の左上のセル値は「行名」「列名」のどちらを表すか不定で、行名なら@miyabi_takatsuk さんの仰る通りですが、列名なら別の名前になると思います。 なので、 - バックスラッシュな罫線を引いて、何も書かない - バックスラッシュな罫線を引いて、行名/列名を併記する というやり方もあるようですね。 https://www.aslive.biz/blog/747/ 最も、markdownでは不可能な表現ですが。
miyabi_takatsuk

2020/06/20 12:23 編集

think49さん > ご指摘ありがとうございます。 キーワードという言い方が、適当なようですね・・・。 確かに、表を見たときの違和感がありましたが、マークダウンだと正しい表現の表記にはできないようですね 汗
guest

0

ご認識の通りかと思います。
実現方法に関しても、外に出すか、引数で渡すかぐらいじゃないかなと思います。

投稿2020/06/19 10:20

Mashiro

総合スコア654

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

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

gongon10600

2020/06/19 11:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問