5

(a) ColdFusion コンポーネントで var スコープ変数を使用する必要があるのはどのような場合で、(b) ColdFusion コンポーネントで var スコープを使用すべきでないのはどのような場合ですか?

4

4 に答える 4

4

複数のリクエスト間で共有される CFC 内に関数を実装する場合は、変数のスコープを var にする必要があります (つまり、アプリケーション スコープ内のシングルトン、サービス CFC)。

CFC が毎回インスタンス化され、呼び出し元メソッドで定義した vars にアクセスする可能性のある同じ CFC 内の別のメソッドをメソッドが呼び出していない場合は、変数のスコープを var にする必要はありません (まだ強くお勧めします)。 . Web サービスまたは ajax を介して直接呼び出したリモート メソッドなど。これは、var スコープを使用していない vars を使用する他のメソッドを呼び出さないか、CFWheels の Controller です。

「常に var キーワードを使用して関数ローカル変数を定義する必要があります。」CFC 変数およびスコープ ドキュメントごとhttp://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=buildingComponents_29.html

于 2011-03-17T14:54:11.237 に答える
3

その変数の値が a) 同じインスタンスにアクセスする他のリクエスト、または b) 同じインスタンス内の他のメソッドの影響を受けないようにするときはいつでも、変数を var スコープにする必要があります。

Henry は素晴らしい人物ですが、「CFC が毎回インスタンス化される場合、変数のスコープを var にする必要はない」という彼の声明があります。間違っています。:) [編集: ヘンリーはその後、彼の回答を編集しました]このブログ エントリで、この点を説明する例を書きました。

http://daveshuck.com/2006/11/28/thread-safety-example-var-scope-your-loop-index-in-coldfusion-cfcs/

ある関数でカウントアップし、別の関数でカウントダウンすることで、無限ループを作成したことがわかります。この場合、同じインスタンスを要求しているのがシングルトンであるか複数のユーザーであるかは関係ありませんが、1 つの要求で 1 つの関数が別の関数の値を上書きしています。

于 2011-03-17T15:47:23.510 に答える
1

コンポーネントのグローバルまたはメンバーではない変数には var スコープを適用します。最後にやりたいことは、変数スコープでグローバルを作成または上書きすることです

于 2011-03-17T14:55:38.303 に答える
0

関数内のすべての var のスコープを設定して、その関数に対してのみローカルに留まるようにします。コンポーネントに関しては、変数またはこのスコープを使用して、変数をコンポーネント内の任意の関数で使用できるようにすることができます。アクセスを正しく設定すると、"this" スコープによって、呼び出し側プログラムが変数を直接使用できるようになります。

于 2011-03-17T15:50:11.843 に答える