javascriptで複数の処理があるような場合すべてを一塊で即時関数で囲みますか?
それともtaxNum、calcNumのようにCSSのBEMのようなことをして即時関数で囲まなくても被らないようにしますか?
すべての式の塊をとりあえず即時関数で囲んでしまえば被る心配がないので、長い名前にしなくても良いですが、今度はスコープの問題で、参照できない事にはまる危険性があり、プロはどちらを選ぶのか気になります。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
objectをnamespaceのように使うこともできます。
javascript
1const hoge = { 2 foo: function() {}, 3 bar: function() {}, 4 baz: function() {} 5} 6 7const fuga = { 8 foo: function() {}, 9 bar: function() {}, 10 baz: function() {} 11}
投稿2017/08/04 06:59
総合スコア127
0
ベストアンサー
外部スコープに公開する必要性
例えば
計算1
計算2
計算3
と会った場合三つをそれぞれ即時関数で囲んでカプセル化するかどうかです。
そうしないと名前が被る問題がありますよね。
「計算1」「計算2」「計算3」を外部スコープに公開する必要があるならグローバル関数化します。
JavaScript
1function calc1 () {} 2function calc2 () {} 3function calc3 () {} 4 5// 外部スコープから関数呼び出しされるので、グローバル関数化しなければならない。 6calc1(); 7calc2(); 8calc3();
外部スコープに公開する必要がないのなら即時関数で括ります。
JavaScript
1(function () { 2 function calc1 () {} 3 calc1(); 4}()); 5 6(function () { 7 function calc2 () {} 8 calc2(); 9}()); 10 11(function () { 12 function calc3 () {} 13 calc3(); 14}());
calc1
, calc2
, calc3
間でのみスコープを共有できれば良いのであれば、まとめて即時関数で括ります。
JavaScript
1(function () { 2 function calc1 () {} 3 function calc2 () {} 4 function calc3 () {} 5 6 calc1(calc2(calc3())); 7}());
まとめ
結局、バランスの問題なので一概にどちらが良いといえるものではないと思います。
すべての式の塊をとりあえず即時関数で囲んでしまえば被る心配がないので、長い名前にしなくても良いですが、今度はスコープの問題で、参照できない事にはまる危険性があり、プロはどちらを選ぶのか気になります。
「即時関数で括る事でスコープ範囲外になってしまう」のは設計の問題であって、即時関数で括る事が問題なのではありません。
関数スコープ/ブロックスコープを利用して出来るだけ変数のスコープを狭くしつつ、各々のスコープ内に収まるコードにするのが基本になります。
投稿2017/08/04 06:57
総合スコア18164
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/04 07:50
退会済みユーザー
2017/08/04 09:24
2017/08/04 12:31 編集
退会済みユーザー
2017/08/15 02:28
0
let
const
を使えば再定義時にエラーになるので変数名かぶりの心配はないのでは?
関数名かぶりは避けられないですが、さすがにそれをやってしまうような規模で書くならファイルを分けそう。
投稿2017/08/04 06:04
総合スコア36115
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/04 06:17
2017/08/04 06:31
2017/08/08 02:52
退会済みユーザー
2017/08/15 02:23
2017/08/16 02:17
0
必要があれば囲むし、必要なければ囲まないでしょう
名前空間の話かなとは思うのですが質問に具体性がないので
回答も概要的なものにしかなりえませんね
javascriptは結局prototypeがベースなのでclassのような管理は難しい旨
以前どなたかが解説されていたかと記憶にあります
投稿2017/08/04 05:30
総合スコア114843
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/04 05:34
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/04 07:12
退会済みユーザー
2017/08/04 07:14
2017/08/08 02:35 編集
2017/08/08 03:53
2017/08/08 04:04
退会済みユーザー
2017/08/08 05:51