teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

校生

2019/02/15 10:35

投稿

miyabi-sun
miyabi-sun

スコア21472

answer CHANGED
@@ -5,9 +5,27 @@
5
5
  …という現象を指していますか?
6
6
 
7
7
  もしそうならば、これはそういう仕様です。
8
- Webpackはグローバル変数領域を汚さない為に
8
+ JavaScript一番外側の変数スコープはグローバル変数領域であり
9
- 一度コード全体を関数で区切ってスコープを作ってからその中改めてtest関数を宣言し始めているという設計になっています。
9
+ ここに宣言した変数や関数はコンソールでも使えます。
10
10
 
11
+ しかし、1個でも関数宣言を行いますと、
12
+ その関数内ではスコープが区切られてしまい、その中で変数や関数宣言を行うとグローバル変数領域からは参照出来ない仕様になっています。
13
+
14
+ ---
15
+
16
+ Webpackは複数のスクリプトファイルを1個のファイルに統合させる為、
17
+ スクリプトファイルを流し込むみたいな事をやっているはずなので、
18
+ 各スクリプトの変数領域が混ざって誤作動の原因にならないよう、いたる所で関数を宣言してスコープで区切っている仕様になっているはずです。
19
+
20
+ 関数が1個でも宣言され、
21
+ その中で変数や関数を宣言してもグローバル変数領域には影響されないんでしたね。
22
+
23
+ 念の為一度デベロッパーツールを開いてbundle.jsの中身を開いてみてはどうでしょうか?
24
+ 多分いたる所で関数宣言で括りまくっていると思います。
25
+ その結果`function test(){}`も何らかの関数内で実行される事になる為、グローバル変数領域に届かなくなってしまっているかと考えられます。
26
+
27
+ ---
28
+
11
29
  どうしてもということであればそうですね…
12
30
  下記のコードのようにグローバルスコープのプロパティに関数を流し込めば使えるようになるんじゃないかと思います。
13
31
  お試しあれ。