Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。//...})();の書き方は、どのような意味なのでしょうか?引用は、http://d.hatena.ne.jp/babu_babu_baboo/20170109/1483925930のコードです。票4構文的なことだけを言うと単なる関数呼び出しです。//...}someFuncName();なんて書くのとほぼ同じです。「ほぼ」がつくのかと言うと、someFuncNameと言う名前の変数や関数がどこかですでに定義されていたり、使用されていたりすると意味が変わってしまうからだと思ってください。1回呼ばれたらそれで終わりの関数に、衝突の無いような名前を考えたりしたくないし、1回呼ばれたらもう2度と使わないと言うことを明示したいために、無名関数を作りそれをいきなり呼び出しているわけです。ここまではわかっている人も多いんですが、ではなぜすぐに実行させる、1回しか使わないものをわざわざ関数として書くのでしょうか?一つ良くある理由は、「グローバル環境(※)を汚したくないから」と言うものです。(※)コンテキストと呼んだりもします。(ECMAなんかの公的規格の中でなんて呼ばれているかは失念しました、すいません。)ざっくりと「変数や関数定義を覚えておくための何か」を「環境」と呼んでいると思ってください。s;})();と書くのはどう違うのかと言うと、上ではiは例えvarで変数宣言していたとしても、iはグローバル環境に定義された変数となり、もし他に変数iが使われていたとすると、なにか影響が出てしまうかもしれません。(この例は単純化されすぎていて、「letを使えば良いじゃん」と思う人も多いでしょうが、ちょっと複雑な計算をするときに、他にも一時変数が必要になることは多々あって、そう言うものが確実にグローバル環境に影響しないように宣言できるメリットはご理解いただけると思います。)JavaScriptでは、関数呼び出しを実行すると、そういった一時変数等を格納するためのローカル環境が新たに作られ、関数内で変数宣言や(ネストされた)関数定義を行うと、そのローカル環境内に変数の実体や関数定義が保持されます。(例によって関数呼び出し単位ではなく、「ブロック」単位のローカル変数のことは置いてください。本質的には同じことです。)したがって、上の後半のコードで、iやsを関数内で変数宣言しているわけですが、それらがグローバル変数と重なって何か困ったことが起きると言う心配は無いわけです。このように作られたローカル環境は、関数の実行が終わるときに(通常であれば)捨てられてしまい、ローカル変数の値も関数定義も消えてしまいます、通常は。引用先の記事では、もうちょっと突っ込んだ意図を持って、無名関数の即時呼び出しを使っています。それは「ローカル環境に結び付けられた関数オブジェクトを作成する」ためです。何を言いたいのかわかりにくいかもしれません。引用先の記事のコードは複雑すぎるので、ちょっと単純化した例を作ってみます。increment};})();console.log(myFuncs.getValue);console.log(myFuncs.increment);console.log(myFuncs.getValue());console.log(myFuncs.increment());console.log(myFuncs.getValue());これを実行させてみると、myFuncs.getValueとmyFuncs.incrementが無名関数内で定義された関数オブジェクトを保持していることがわかると思います。その関数を呼び出している、3個目から5個目のconsole.logですが、全く同じコードのconsole.log(myFuncs.getValue());が1回目は0と、myFuncs.increment()を呼び出した後の2回目は1と表示されるのがわかるはずです。普通なら関数呼び出しが終わったら消えてしまうはずのローカル変数(を含むローカル環境)が上記の関数オブジェクト内に保持されているのです。したがって関数オブジェクトgetValue内で参照されているvalueは、そのローカル環境内で定義されたローカル変数であり、関数オブジェクトincrementが参照するvalueも、同じローカル環境内の同じローカル変数なので、incrementを実行した結果が、getValueにも反映されているわけです。{...})();では、このようにしてローカル環境内の多数のローカル変数やローカル関数に依存する関数createを定義し、その定義でできた関数オブジェクトをグローバル環境のcreateに代入しています。したがって、そのcreateを実行する場合には、(通常なら消えちゃっているはずの)ローカル変数やローカル関数を参照することができます。「クロージャー」と呼ばれるものがそういったローカル環境をキャプチャする、と言う性質を使った、ちょっと高度な利用方法で、そこまでの解説を求めていなかったのなら、少しわかりにくかったかもしれません。斜め読みして「クロージャー」なんて用語に興味を引かれたらまた読み直してみてください。呼ばれるもので、無名関数を定義した直後に実行する記法です。})('hello');スコープを区切るためによく使われるかと思います。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。同じ意味でしょうか?1coffeescriptでのfunctionの書き方を教えてください。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。