次の例の結果を見れば問題がわかります:
これら 3 つの例の実行結果は次のとおりです:
Results#region Results
No.1
0
unknown
No.2
0
1
No.3
0
未定義
#endregion
JavaScript 変数にもスコープがあることがわかりましたが、それらは非常に一般的なものであり、グローバル変数に分割されていますそして関数変数。 2 番目の例では、すべての変数がグローバル変数であり、そのステートメント ブロックで合計 2 つの変数が定義されているため、0 と 1 が取得されます。関数の外側にある 1 番目と 3 番目のグローバル変数は、実際には、var キーワードが存在するかどうかは問題ではないことを意味します。関数内の var キーワードは非常に重要で、2 番目の var01 が関数内の変数であるため、var01 を初期化する前の出力は当然「未定義」になります。
つまり、グローバル var01 は関数内でブロックされているのでしょうか? C/C では :: を使用してグローバル変数にアクセスできることはわかっていますが、それを JavaScript で実行できるのでしょうか?実際、グローバル変数が何であるかを理解していれば、それは簡単です。グローバル変数は、Window オブジェクトのウィンドウ インスタンスに動的に追加される属性であるため、値 1 を取得するには関数内で document.write(window.var01); を使用するだけで済みます。同時に、このコンテキストでは、関数内の this は、参照を this.var01 として記述することもできます。
ところで、JScript チュートリアルを読み直してみると、変数は [a-zA-Z_] [a-zA-Z0-9_]* の形式しか使用できないと書いてありましたが、'$' も使用できますまた、$1234 のように先頭に使用することもできます。$$$ も有効な変数名です。
それが本当かどうか知りたいのですが、関数を呼び出すとき、プログラムの実行シーケンスはまず関数の内部変数にキーワード var があるかどうかを確認し、その後、異なるスコープと変数が異なる変数に割り当てられます。これらの 3 つの関数では、var01 変数が出力ステートメントの後にあることがわかります。
}
function set_global_var(___name,___value); 🎜>{
eval (___name "=___value");
var aa=11;
WScript.Echo(aa);//22
function Test()
{
var aa=33;
WScript.Echo(get_global_var("aa"));//11
set_global_var("aa",22); .Echo(get_global_var("aa "));//22
WScript.Echo(aa);//33
}
上記の例では、これは Test を参照することはありません、ただし常に WScript の例。
var test = new Test(); というステートメントを書くと、this in Test は Test のインスタンスを参照します。この例では、グローバル変数を使用する場合、Lostinet がメソッドを提供します。
しかし、最も簡単な方法は、グローバルをオブジェクトに渡して次のように Test を定義することです:
コードをコピーします
コードは次のとおりです。次のように:
function Test(global)
{ // ... }次に、次のようにインスタンスを作成します: var test = new Test(this); Just Global オブジェクトとプロパティは Test インスタンスで使用できます。
これは、new のインスタンスの場合はインスタンスを指しますが、それ以外の場合は WScript を指しますか?この場合、スクリプトエンジンを変更すると状況は変わりますか?これは標準ですか?
newconstructor[(arguments)];
new 演算子は次のタスクを実行します:
・メンバーを持たないオブジェクトを作成します。
・そのオブジェクトのコンストラクターを呼び出し、新しく作成されたオブジェクトへのポインターを this ポインターとして渡します。
・コンストラクターは、渡されたパラメーターに基づいてオブジェクトを初期化します。
new が現在のスコープで呼び出されない場合でも、new はその親スコープで呼び出される可能性があることに注意してください。そのため、「new のインスタンスでは、これはインスタンスを参照します。それ以外の場合は、WScript を参照しますか?」、前半 文は正しいですが、文の後半は正しくありません。