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

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

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

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

Q&A

解決済

2回答

1085閲覧

JavaScriptの構文

gksh7

総合スコア41

JavaScript

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

0グッド

0クリップ

投稿2017/08/28 05:36

編集2017/08/28 05:48

JavaScript勉強中のものです。
すごく基本的なことを聞いてしまいますが、
下記の構文は、どういう意味があるのでしょうか?

###ソースコード
var hoge;

(function(hoge) {

〜〜〜〜〜 省略 〜〜〜〜〜〜

})(hoge || (hoge = {}));

自分で調べてみようかと思ったのですが、調べ方が悪いせいか、解決できません。

ご教示頂けますと助かります。

どうぞよろしくお願いいたします。

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

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

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

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

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

mattn

2017/08/28 05:42

編集ボタンを押してコード部分にコードブロックを使うよう修正して下さい。
guest

回答2

0

命題は書式的に意味がない部分があります

hoge || (hoge = {})

これはhogeに空のオブジェクトを代入しつつ、コールバックに
戻り値{}を返しています。
普通は
hoge || {}
で済ますものですね

宣言しているか怪しい場合は

javascript

1(function(fuga){console.log(fuga);})(typeof hoge=="undefined" || hoge ||{}); 2

の様に処理します。
ただ、hoge=1だった場合、1を戻すようになるのでhogeで受けるデータ型が
一葉でなくなるのは仕様としてどうかとおもいます

javascript

1var hoge={a:1,b:2}; 2(function(fuga){console.log(fuga);})(typeof hoge=="object"?hoge:{}); 3

のような処理が妥当だと思います

投稿2017/08/28 06:08

yambejp

総合スコア114968

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

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

gksh7

2017/08/28 06:23

なるほどです。 少々、自分には難しかったのですが、何度も何度も読み返し、おっしゃっていること理解できました。 教えてくださった妥当な記法で今後は書くようにいたします。 ありがとうございます!
guest

0

ベストアンサー

javascript

1(function(hoge) { 2 3〜〜〜〜〜 省略 〜〜〜〜〜〜 4 5})(hoge || (hoge = {}));

この処理が意味するのは

  • 即時関数の中で変数 hoge を扱いたい。
  • でも hoge は null かもしれない。
  • null だったら object として初期化されていて欲しい。
  • そしてこの処理が抜けた後は hoge は object で初期化されていて、即時関数内でプロパティを変更したままであって欲しい。

こういった場合にこの書き方をします。以下の様に使います。

javascript

1var hoge = null; 2(function(hoge) { 3 hoge.value = "hello world"; 4})(hoge || (hoge = {})); 5 6console.log(hoge.value);

投稿2017/08/28 05:47

編集2017/08/28 05:48
mattn

総合スコア5030

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

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

gksh7

2017/08/28 06:00

ありがとうございます。 すぐにご回答頂けてたいへん助かりました。 ご丁寧な解説、例も掲載していただき、よく理解できました。 感謝申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問