問題タブ [scope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - メソッドにパラメーター化された場合のC#変数とオブジェクトのスコープ
私は継承、ポリモーフィズム、カプセル化を広範囲に使用していますが、オブジェクトと変数のスコープに関する次の動作を知らなかったことに気付きました。違いは、次のコードで最もよく示されます。
したがって、変数がメソッドに渡されると、変更はメソッドのスコープに限定されると思いました。しかし、オブジェクトがメソッドに渡された場合、そのオブジェクトのプロパティが変更されると、メソッドを超えて拡張されるようです。
この動作が変数ではなくオブジェクトに対して存在するというルールである場合、これを受け入れることができますが、.netではすべてがオブジェクト、文字列です(例のようなものはSystem.Stringです)。メソッドに渡すパラメータのスコープ?
javascript - JavaScript のスコープとクロージャー
私は頭をクロージャーに巻き込もうとしています(どこかに冗談があります)、これに出くわしました:
これはどのように作動しますか?関数を括弧に入れる目的は何ですか? 後で空の括弧が表示されるのはなぜですか?
delphi - Delphi で範囲外になったオブジェクトはどうなりますか?
関数内でオブジェクトが作成され、関数が完了すると、オブジェクトが明示的に破棄されていない場合、オブジェクトはどうなりますか?
すべての変数は、スコープ外になったときに破棄する必要がありますか、それともスコープ外になったときに処理されますか?
たとえば、custom_function が呼び出された後、locallist はどうなるでしょうか?
javascript - ようやくJavascriptのスコープを理解したと思ったとき
私は、明らかにまだ理解していないことを示す何かに出くわします。
以下で「this」の値が変化する理由を誰か説明してもらえますか?
ruby - 私の例でこれが公にアクセスできるのはなぜですか: "MySymbol :: TABLE"
ブログで見つけた上記の例では、TABLEがハッシュであり、MySymbolクラスのメンバーであることを理解しています。私が理解していないのは、Stringクラス内からパブリックにアクセスする方法です。クラスインスタンス変数はデフォルトでプライベートであり、クラスの外部からそれらにアクセスするにはget / setメソッドを使用する必要があると思いましたか?
javascript - 関数の引数
ここで関数内では、変数f
はローカルFoo
(関数スコープを持っています) ですf
が、引数リスト内の変数が競合していないのはなぜですか? Foo.arguments
オブジェクト内でバインドされているためでしょうか。
他の言語では、引数変数をローカル変数と同じ名前で宣言することはできません。
この名前のあいまいさはどのように解決されますか? f
または、メソッドの後半で 2 つの異なる変数をそれぞれどのように参照しますか?
java - Javaでは、クラス内の列挙型は静的ですか?
内部クラスの内部からアクセスできるように、列挙型の内部から周囲のクラスのインスタンスメンバーにアクセスできないようです。それは列挙型が静的であることを意味しますか?周囲のクラスのインスタンスのスコープへのアクセスはありますか、それとも必要な場所でインスタンスを列挙型のメソッドに渡す必要がありますか?
c# - ASP.NET の静的内部クラスのスコープ
非静的クラスの 1 つの静的内部クラスのスコープがわかりません。
以下の行で、変数 DataContextCreator.Instance (Singleton パターンの一部) は、すべての Page オブジェクト/ページ要求に対して同じ PDataContext インスタンスを指しますか?それとも、各オブジェクトは独自のインスタンスを持ちますか?
これが望ましい方法で機能するためには、HttpContext.Current を使用する必要がありますか。つまり、共有 DataContext はありませんか? もしそうなら、別の方法はありますか?
(私が行ったように) 静的クラスをプライベートに変更することでうまくいくかどうかはわかりません。
ありがとう!
編集:これは、同じ遅延読み込み機能を備えていますが、静的変数がない私のソリューションです。この場合、保持変数の周りにミューテックス ロックを配置する必要はないと思います。
perl - Perlでのスコープ変更に関するコードの延期
現在のスコープを離れるときに実行されるコードをスケジュールできると便利なことがよくあります。TCLでの私の前の人生で、友人がdeferと呼ばれる関数を作成しました。
次のようなコードが有効になりました。setfp[open"x"] defer( "close $ fp");
これは、現在のスコープが終了したときに呼び出されました。主な利点は、スコープを離れる方法や場所に関係なく、常に呼び出されることです。
だから私はPerlで似たようなものを実装しましたが、もっと簡単な方法があるようです。コメント批評を歓迎します。
私がPerlでそれをした方法:
- 実行するサブの配列を保持するグローバルなタイ変数を作成します。
- 終了時にfnが呼び出されるようにスケジュールするときはいつでも、localを使用して配列を変更します。現在のスコープを離れると、グローバルが関連付けられているため、Perlはグローバルを前の値に変更します。この値の変更がいつ発生するかを知っており、リスト内のサブを呼び出すことができます。
実際のコードは以下のとおりです。
これを行うためのより良い方法はありますか?これは一般的に必要な機能のようです。
c++ - 親クラスのすべての変数をインポートします
gccの新しいバージョンでは、標準がより厳密になっていることに気付くかもしれません(この質問を参照してください) 。
テンプレートクラスの継承されたすべてのメンバーは、フルネームを使用して呼び出す必要があります。
ParentClass<T>::member
ただの代わりにmember
しかし、それでも私はこれを尊重しない古いコードをたくさん持っています。using ParentClass<T>::member
各クラスの使用済みメンバーごとに追加するのは非常に面倒です。のようなことをする方法はありusing ParentClass<T>::*
ますか?g ++でこのチェックを非アクティブ化するよりも、これを有効にしたいと思いますが、現在方法がある場合、どうすれば非アクティブ化できますか?
編集:
C ++ FAQ(sthに感謝)によると、これらは継承されたメンバー変数名を正しく解決する唯一の方法です:
呼び出しをから
f()
に変更しますthis->f()
。これは常にテンプレートに暗黙的に依存しているため、this->f
依存しているため、テンプレートが実際にインスタンス化されるまでルックアップは延期され、その時点ですべての基本クラスが考慮されます。挿入
using B<T>::f
; を呼び出す直前f()
。呼び出しをf()から。に変更します
B<T>::f()
。
だから今、フルネーム解決を非アクティブ化するための正しいスイッチを探しています...