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

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

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

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

Q&A

解決済

2回答

4289閲覧

JavaScriptでの"is already defined"(日時取得)

spangl

総合スコア21

JavaScript

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

0グッド

0クリップ

投稿2020/11/17 05:42

下記コードを記述したところ「〜 is already defined」エラーが出てしまいました。
(一部moment.jsを使っています)

JavaScript

1 2//サーバタイムを取得 3$.ajax({ 4 type: 'GET' 5}).done(function(data, status, xhr) { 6 var serverDate = new Date(xhr.getResponseHeader('Date')); 7 8//時刻データ 9var now = moment(serverDate); 10var year = now.year(); 11var month = now.month() + 1; 12var date = now.date(); 13var hour = now.hours(); 14var minute = now.minutes(); 15 16//時計表示用:数字が10以下の場合は頭に0を足す 17if(hour < 10) { 18 var hour = "0" + hour 19} 20if(minute < 10) { 21 var minute = "0" + minute 22} 23});

エラーが出たのは下から3行目「var minute = "0" + minute」行です。
('minute' is already defined.、のエラーメッセージが出ます)
その上の「var hour = "0" + hour」部分はエラーになりません。

元々はサーバタイムではなく、シンプルに現在時刻を取得していたのですが
『//サーバタイムを取得』部分を足してからこのエラーが出るようになりました。

スコープがおかしいのでしょうか?
何らかヒントでも、ご教授いただければ幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

if文の宣言子varは要りません。
エラー文を翻訳すると、
'minute' はすでに定義されています
です。
つまり、上で宣言されているので、
if文内で改めて宣言し直す必要がありません。

var hour = "0" + hour
がエラーが起きなかったのは、単純にそこを通ってないだけです。
(10時より前の時間だったら通るのでエラーになる)

javascript

1//時計表示用:数字が10以下の場合は頭に0を足す 2if(hour < 10) { 3 hour = "0" + hour; 4} 5if(minute < 10) { 6 minute = "0" + minute; 7}

投稿2020/11/17 05:50

miyabi_takatsuk

総合スコア9528

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

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

spangl

2020/11/17 05:54

おっしゃる通りでした…エラーが起こらなかった理由についても納得です…。 大変お手数をお掛けしました。ありがとうございました。
hentaiman

2020/11/17 05:57

いふのなかでばーしない方がいいですね
miyabi_takatsuk

2020/11/17 05:58

エラー文は、なぜエラーなのかを書いている記載なので、 英語わからなければ、翻訳を使うと、 だいぶ理解できるようになると思います。
miyabi_takatsuk

2020/11/17 06:00 編集

hentaimanさん > ですねー 関数スコープなので、 ifだと、スコープ閉じ込めできませんしね 汗 やっぱletですよ、ほんとに。
spangl

2020/11/17 06:01

さきほど翻訳ツールもブックマークバーに追加しました…。 お恥ずかしい限りです。よい勉強になりました。
spangl

2020/11/17 06:04

hentaimanさん > 実は通常のフロントエンドコーディングではなくMAツール管理画面でのコーディングでして、 環境上、constもletも使えないのです…。; ただ非常に参考になりました。ありがとうございます。
guest

0

js

1var minute = now.minutes(); 2

と上のほうで定義されているからでは。

js

1 var hour = "0" + hour

がエラーにならないのは、たまたまその時点でそこを通らなかっただけのように思います。

投稿2020/11/17 05:44

tetsunosuke

総合スコア1292

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

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

spangl

2020/11/17 05:53

おっしゃる通りでした…。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問