問題タブ [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.

0 投票する
6 に答える
1100 参照

perl - 別のスタック フレームで Perl 変数をローカライズするにはどうすればよいですか?

いくつかのコードのさまざまな場所に次のことを効果的に書き出す自動生成コードがあります。

コードを自動生成するとき、コードが「美しい」ものである必要はないと主張する人もいますが、私はそれをサブルーチンに引き出したいと考えています。ただし、それはそのサブルーチンでそれらの変数をローカライズします。呼び出し元のスタック フレームでこれらの変数をローカライズする方法はありますか?

更新: 同様に、より高いスタック フレームで eval を実行できると便利です。Pythonにはすでにこれがあると思います。Perlもそうなればいいのに。

0 投票する
4 に答える
468 参照

c++ - 自動変数の有効期間を追跡していますか?

無理かもしれませんが、質問させていただきます...

変数自体のクラスを変更せずに自動変数が削除されたかどうかを追跡する方法はありますか? たとえば、次のコードを検討してください。

明らかに、ブロックの後、pStringBuffer はダングリング ポインターであり、有効である場合と有効でない場合があります。私が望むのは、pStringBuffer (const char* のキャスト演算子を含む) を含むラッパー クラスを持つ方法ですが、参照している変数がまだ有効であることを主張します。参照される変数の型を変更することで、確かにそれを行うことができます (たとえば、shared_ptr/weak_ptr をブーストする) が、参照される型に制限を課すことなく実行できるようにしたいと考えています。

いくつかの考え:

  • おそらく、代入構文を変更して、参照された変数を含める必要があります (これで問題ありません)。
  • ラッパー クラスが参照されたクラスよりも「後で」割り当てられたかどうかを検出するためにスタック ポインターを調べることができるかもしれませんが、これはハッキーで標準的ではないようです (C++ はスタックの動作を定義していません)。しかし、それはうまくいくかもしれません。

考え/素晴らしい解決策はありますか?

0 投票する
5 に答える
4086 参照

javascript - Javascript/ECMAScript の関数のスコープは何ですか?

今日、同僚と Javascript のネストされた関数について話し合いました。

この例では、c と同様に、b は a の本体の外では到達できないことが試行で指摘されています。ただし、d は - a() の実行後です。ECMAScript v.3 標準でこの動作の正確な定義を探しましたが、探していた正確な言葉遣いが見つかりませんでした。Sec.13 p.71 が述べていないのは、関数宣言ステートメントによって作成された関数オブジェクトがどのオブジェクトにバインドされるかです。何か不足していますか?

0 投票する
4 に答える
15855 参照

javascript - setTimeout 呼び出し内で範囲外の Var を解決する方法

setInterval コールバック内から setTimeout を呼び出そうとしています:

setInterval は期待どおりに機能しますが、setTimeout 呼び出しは失敗します。この問題は、スコープ外の変数 (myVar) を参照しているという事実に関連していると思います。

これを解決する最善の方法は何ですか?

0 投票する
11 に答える
44528 参照

java - Javaの中括弧はそれ自体で何を意味しますか?

中括弧を 2 つの方法で使用する Java コードがあります。

if最初のステートメントの後の独立した中括弧は何を意味しますか?

0 投票する
2 に答える
2020 参照

php - PHP の session_set_save_handler のコールバック メソッドはプライベートにできますか?

PHP でカスタム セッション ハンドラを作成し、session_set_save_handler で定義されたメソッドを非公開にしようとしています。

たとえば、オープン関数をエラーなしでプライベートに設定できますが、書き込みメソッドをプライベートにすると、吠えます。

致命的なエラー: 行 0 の不明なコンテキスト '' からプライベート メソッド Session::write() を呼び出します

これがバグなのか、これを回避する方法があるのか​​ 疑問に思っていました。確かにそれを公開することはできませんが、むしろしたくありません。去年の php.net に同様のことを回避する投稿がありましたが、誰かアイデアがあるかどうか知りたいだけです。それは本当に問題ですか?開発ボックスで PHP 5.2.0 を使用していますが、確実にアップグレードできます。

0 投票する
13 に答える
11023 参照

curly-braces - 追加のスコーピングに中括弧を使用していますか?

関数、クラス、if、while、switch、try-catchに必要なときに使用する以外の意味です。

このSOの質問を見るまで、このようにできるとは知りませんでした。

上記のリンクで、Eliは、「通常は折りたたまれる関数、クラス、ループなどに分類されない論理セクションでコードを折りたたむために使用します」と述べています。

上記以外にどのような用途がありますか?

中括弧を使用して変数のスコープを制限し、必要な場合にのみスコープを拡張することをお勧めします(「アクセスの必要性」に基づいて作業します)。それとも実際にはばかげていますか?

異なるスコープで同じ変数名を同じ大きなスコープで使用できるようにするために、スコープを使用するのはどうですか?または、同じ変数を再利用して(同じ変数名を使用する場合)、割り当て解除と割り当てを節約することをお勧めします(一部のコンパイラーはこれを最適化できると思いますか?)。それとも、異なる変数名を一緒に使用する方が良いですか?

0 投票する
3 に答える
4857 参照

c++ - C++では、参照を介してスコープを拡張しても安全ですか?

C++では、参照を介してスコープを拡張しても安全ですか?

コードでは、私が意味するのは次のとおりです。

0 投票する
6 に答える
22090 参照

c++ - C++ でのスコープと戻り値

私は c++ からやり直し、変数のスコープについて考えていました。関数内に変数があり、その変数を返す場合、その変数は、スコープが終了したために返されたときに「死んで」いませんか?

文字列を返す関数でこれを試してみましたが、うまくいきました。誰でもこれを説明できますか?または、少なくともこれを説明できる場所を教えてください。

ありがとう

0 投票する
3 に答える
2768 参照

c++ - Objective C から C++ を使用する: 割り当て/割り当て解除の方法は?

現在、Objective C クラスは、所有者が作成されたときに a を実行し、所有者が破棄されたときにnew呼び出すことによって、C++ オブジェクトを使用しています。deleteしかし、別の方法はありますか?auto_ptrたとえば、スコープが Objective C クラスの存続期間中続くを宣言できるようにしたいと考えています。