🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スコープ

スコープとは、プログラム内で変数名など、参照可能な有効範囲のことを指します。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

3回答

994閲覧

javascript 関数スコープからグローバルスコープ

tomotomo2

総合スコア2

スコープ

スコープとは、プログラム内で変数名など、参照可能な有効範囲のことを指します。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/02/10 09:14

javascriptで、関数内で宣言した変数をグローバルスコープにする方法はありますか?

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

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

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

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

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

AT_2nd

2021/02/10 09:24

実行環境はブラウザでしょうか、node.jsでしょうか。 或いは何か別のものでしょうか。
tomotomo2

2021/02/10 09:28

返信いただきありがとうございます。 実行環境は、ブラウザ(Clome)で、node.jsです。
AT_2nd

2021/02/10 09:45

関数内で変数を宣言しなければ、グローバル変数に直接アクセスしますが、 それでは駄目なのでしょうか?
int32_t

2021/02/10 09:46

答えは「方法はありません」だと思いますけど、どうしてこの疑問を持つに至ったか理由を書いていただけると別の解決策が得られるかもしれません。
tomotomo2

2021/02/10 09:55

返信いただきありがとうございます。 疑問を持つに至った理由は、 内容をあまり詳しく言えなくて、恐縮です。 Socket.ioで、別端末からデータを取得するwebアプリを作成していたのですが、 データ取得の際に、受信用の関数?に値が入ってきます。 その後、受信した値を活用するため、その受信用関数の中に処理を書いていたのですが、 その処理が描画部分に関わっていて、受信の度にwebがリロードされてしまうと言う問題が発生していました。 と言う理由です。 長々と失礼いたしました。
Zuishin

2021/02/10 10:28

「グローバル」をどういう意味で使っていますか?
tomotomo2

2021/02/10 10:33

javascriptはじめたてなので、間違っていたら申し訳ないのですが、 htmlのなかに<script>...</script>と書いた時、そのカッコの中身のどこでも呼び出せると言う意味で、グローバルという言葉を使っていました。
Zuishin

2021/02/10 10:36

セッションをまたいで使えなくてもいいんですよね? よく見ると AT_2nd さんが既に書かれていますが、私の回答のように var や const などなしで変数に値を代入するとグローバルスコープの変数になります。こういうことじゃないんでしょうか?
tomotomo2

2021/02/10 10:50

「 var や const などなしで変数に値を代入するとグローバルスコープの変数になります。」 と言う返信で、やっと理解しました。 実際に、実装してみたところ成功致しました。 ご協力いただき、ありがとうございます。
guest

回答3

0

関数を呼び出すときにwindowのプロパティに設定してみては?

投稿2021/02/10 09:18

yambejp

総合スコア116694

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

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

yambejp

2021/02/10 09:25 編集

var x=1; console.log(x); //出力:1 (()=>{ var x=2; console.log(x); //出力:2 })(); console.log(x); //出力:1 (()=>{ var x=3; window.x=x; })(); console.log(x); //出力:3
tomotomo2

2021/02/10 10:08

返信いただきありがとうございます。 この方法を試してみましたが、出力:3で初期値が表示されました。 他の方法も考えて試してみます。
yambejp

2021/02/10 10:12

まるっとコピペしても出力が3にならないのでしょうか? OSやブラウザの種類・バージョンなど提示してみては?
guest

0

ベストアンサー

JavaScript

1const func = () => { 2 hello = "Hello World!"; 3}; 4 5func(); 6console.log(hello);

こういうことじゃないんですか?

投稿2021/02/10 10:13

Zuishin

総合スコア28669

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

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

Zuishin

2021/02/10 11:24

ただし、これはグローバル関数に限ったことではありませんが、hello が既にローカルスコープで作成されている場合はグローバルスコープにならないので注意してください。関数の中で関数を定義している時など要注意です。
guest

0

こんばんは。

とりあえず、globalThis のプロパティを参照するぐらいしかないのでは。
globalThis - JavaScript | MDN

js

1var hoge = "global"; 2 3function fuga(){ 4 var hoge = "local"; 5 6 function piyo(hoge){ 7 hoge += "です。" 8 console.log("hoge = ",hoge); // hoge = globalです。 9 } 10 11 piyo(globalThis.hoge); 12} 13 14fuga();

投稿2021/02/10 09:34

Lhankor_Mhy

総合スコア36946

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

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

Lhankor_Mhy

2021/02/10 09:35

あ、いや、これだと値が渡ってるだけだから、適切な例示じゃないか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問