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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

5274閲覧

別JSファイルの変数・関数を利用したい

tomiswinner

総合スコア3

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/08/20 23:19

わからないこと
下記のコードでなぜ関数secondFunc()のみ正常に利用することができ、
他のグローバル変数や、クラスなどが ReferenceError となるのかがわからない。

認識
HTMLの解析は上から順に行われていくので、second.js では first.js が、third.js では first.js と second.js のグローバル変数・関数を扱うことができる。
グローバル変数・関数はwindowの下に入っているものなのでファイルを分けても共有されるもの。
しかしうまくいかず、、、

HTML

1<!DOCTYPE html> 2<html lang = 'ja'> 3 <head> 4 <meta charset = 'utf-8'> 5 </head> 6 <body> 7 <script src = first.js></script> 8 <script src = second.js></script> 9 <script src = third.js></script> 10 </body> 11</html>

Javascript

1'use strict' 2{ 3 let first = "global first"; 4 5 function firstFunc(){ 6 return first; 7 } 8 9 class First{ 10 11 constructor(){ 12 this.num1 = 1; 13 } 14 15 getNum1(){ 16 return this.num1; 17 } 18 } 19}

javascript

1'use stirct' 2{ 3 4 const second = "global second"; 5 6 7 function secondFunc(){ 8 return second; 9 } 10 11 class Second{ 12 constructor(){ 13 this.num2 = 2; 14 } 15 getNum2(){ 16 return this.num2; 17 } 18 } 19 20 console.log(first); // ReferenceError : first is not defined 21 console.log(firstFunc()); // ReferenceError : firstFunc is not defined 22 23}

javascript

1'use strict' 2{ 3 const third = "global third"; 4 5 console.log(first); //ReferenceError : first is not defined 6 console.log(second); //ReferenceError : second is not defined 7 8 console.log(secondFunc()); //global second が出力 9 console.log(firstFunc()); //ReferenceError : firstFunc is not defined 10 11 const sec = new Second(); //ReferenceError : Second is not defined 12 13 14 15} 16

一体なぜこのようことが起きてしまうのでしょうか?
どなたか解答お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

3種のJSファイルのuse strict以降を{}で囲っているためグローバルになっていないのでは?
以下、参考です。

Javascript

1'use strict' 2//{ 3 let first = "global first"; 4 5 function firstFunc(){ 6 return first; 7 } 8 9 class First{ 10 11 constructor(){ 12 this.num1 = 1; 13 } 14 15 getNum1(){ 16 return this.num1; 17 } 18 } 19//}

投稿2020/08/20 23:26

編集2020/08/20 23:27
nekoniki

総合スコア2409

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

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

tomiswinner

2020/08/20 23:55

ブロックスコープが適用されるのですね、ありがとうございます! 追加で申し訳ないのですがただ一点わからないことがあります。 ブロックスコープが適用されているのに、何故second.jsのsecondFunc()関数は利用できるのでしょうか? またその一方でfirst.jsのfirstFunc()関数が利用できないのは何故なのでしょうか?
nekoniki

2020/08/21 00:23

よくよく見たらsecond.jsだけ`use stirct`になっていました。 first.jsは`use strict`が効いているため暗黙的グローバルの宣言ができずfirstFunc()が使えなくなっていたのだと思います。 参考 https://qiita.com/ymaru/items/3c73af2cd4efe027a618
tomiswinner

2020/08/22 03:19

初歩的な部分でしたね、、申し訳ないです。 丁寧に対応いただき本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問